Spring-IOC的基础内容有哪些

发布时间:2021-10-13 09:49:04 作者:iii
来源:亿速云 阅读:138

这篇文章主要讲解了“Spring-IOC的基础内容有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring-IOC的基础内容有哪些”吧!

第1节 Spring IoC基础

Spring-IOC的基础内容有哪些
1.1 BeanFactory与ApplicationContext区别

BeanFactory是Spring框架中IoC容器的顶层接口,它只是用来定义⼀些基础功能,定义⼀些基础规范,而ApplicationContext是它的⼀个子接口,所以ApplicationContext是具备BeanFactory提供的全部功能的。

通常,我们称BeanFactory为SpringIOC的基础容器,ApplicationContext是容器的高级接口,比BeanFactory要拥有更多的功能,比如说国际化支持和资源访问(xml,java配置类)等等

Spring-IOC的基础内容有哪些

启动 IoC 容器的方式

1.2 纯xml模式

本部分内容我们不采用⼀⼀讲解知识点的方式,而是采用Spring IoC 纯 xml 模式改造我们前面手写的IoC 和 AOP 实现,在改造的过程中,把各个知识点串起来。

单例模式:singleton

对象出生:当创建容器时,对象就被创建了。

对象活着:只要容器在,对象⼀直活着。

对象死亡:当销毁容器时,对象就被销毁了。

⼀句话总结:单例模式的bean对象生命周期与容器相同。

多例模式:prototype

对象出生:当使用对象时,创建新的对象实例。

对象活着:只要对象在使用中,就⼀直活着。

对象死亡:当对象长时间不用时,被java的垃圾回收器回收了。

⼀句话总结:多例模式的bean对象,spring框架只负责创建,不负责销毁。

在基于xml的IoC配置中,bean标签是最基础的标签。它表示了IoC容器中的⼀个对象。换句话说,如果⼀个对象想让spring管理,在XML的配置中都需要使用此标签配置,Bean标签的属性如
下:

id属性: 用于给bean提供⼀个唯⼀标识。在⼀个标签内部,标识必须唯⼀。

class属性:用于指定创建Bean对象的全限定类名。

name属性:用于给bean提供⼀个或多个名称。多个名称⽤空格分隔。

factory-bean属性:用于指定创建当前bean对象的工厂bean的唯⼀标识。当指定了此属性之后,class属性失效。

factory-method属性:用于指定创建当前bean对象的工厂方法,如配合factory-bean属性使用,则class属性失效。如配合class属性使用,则方法必须是static的。

scope属性:用于指定bean对象的作用范围。通常情况下就是singleton。当要用到多例模式时,可以配置为prototype。

init-method属性:用于指定bean对象的初始化方法,此方法会在bean对象装配后调用。必须是⼀个无参方法。

destory-method属性:用于指定bean对象的销毁方法,此方法会在bean对象销毁前执行。它只能为scope是singleton时起作用。

Spring-IOC的基础内容有哪些


在使用构造函数注入时,涉及的标签是 constructor-arg ,该标签有如下属性:

name:用于给构造函数中指定名称的参数赋值。

index:用于给构造函数中指定索引位置的参数赋值。

value:用于指定基本类型或者String类型的数据。

ref:用于指定其他Bean类型的数据。写的是其他bean的唯⼀标识。

顾名思义,就是利用字段的set方法实现赋值的注入方式。此种方式在实际开发中是使用最多的注入方式。

Spring-IOC的基础内容有哪些

在使用set方法注入时,需要使用 property 标签,该标签属性如下:

name:指定注入时调用的set方法名称。(注:不包含set这三个字母,druid连接池指定属性名称)

value:指定注入的数据。它支持基本类型和String类型。

ref:指定注入的数据。它支持其他bean类型。写的是其他bean的唯⼀标识。

  接下来就是注入的方式的选择,只能在构造函数和set方法中选择,我们的示例选用set方法注入。

Spring-IOC的基础内容有哪些

   在List结构的集合数据注入时, array , list , set 这三个标签通用,另外注值的 value 标签内部可以直接写值,也可以使用 bean 标签配置⼀个对象,或者用 ref 标签引用⼀个已经配合的bean的唯⼀标识。

在Map结构的集合数据注⼊时, map 标签使用 entry 子标签实现数据注入, entry 标签可以使用key和value属性指定存⼊map中的数据。使用value-ref属性指定已经配置好的bean的引用。同时 entry 标签中也可以使用 ref 标签,但是不能使用 bean 标签。而 property 标签中不能使用 ref 或者 bean 标签引用对象

注意:

1)实际企业开发中,纯xml模式使用已经很少了

2)引入注解功能,不需要引入额外的jar

3)xml+注解结合模式,xml文件依然存在,所以,spring IOC容器的启动仍然从加载xml开始

4)哪些bean的定义写在xml中,哪些bean的定义使用注解

第三方jar中的bean定义在xml,比如德鲁伊数据库连接池

自己开发的bean定义使用注解

 Spring-IOC的基础内容有哪些

      @Autowired(推荐使用)

      @Autowired为Spring提供的注解,需要导入包  org.springframework.beans.factory.annotation.Autowired。
      @Autowired采取的策略为按照类型注入。

public class TransferServiceImpl {
             @Autowired
             private AccountDao accountDao;
         }

     如上代码所示,这样装配回去spring容器中找到类型为AccountDao的类,然后将其注入进来。这样会产生⼀个问题,当⼀个类型有多个bean值的时候,会造成无法选择具体注⼊哪⼀个的情况,
     这个时候我们需要配合着@Qualifier使用。@Qualifier告诉Spring具体去装配哪个对象。

public class TransferServiceImpl {
           @Autowired
           @Qualifier(name="jdbcAccountDaoImpl")
           private AccountDao accountDao;
     }


   这个时候我们就可以通过类型和名称定位到我们想注入的对象。

   @Resource

   @Resource 注解由 J2EE 提供,需要导⼊包 javax.annotation.Resource。

   @Resource 默认按照 ByName 自动注入。
   

 public class TransferService {
           @Resource
           private AccountDao accountDao;
           @Resource(name="studentDao")
           private StudentDao studentDao;
           @Resource(type="TeacherDao")
           private TeacherDao teacherDao;
           @Resource(name="manDao",type="ManDao")
           private ManDao manDao;
     }


         如果同时指定了 name 和 type,则从Spring上下文中找到唯⼀匹配的bean进行装配,找不到则抛出异常。
         如果指定了 name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
         如果指定了 type,则从上下文中找到类似匹配的唯⼀bean进行装配,找不到或是找到多个,都会抛出异常。
         如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;

   注意:

   @Resource 在 Jdk 11中已经移除,如果要使用,需要单独引入jar包

   <dependency>
           <groupId>javax.annotation</groupId>
         <artifactId>javax.annotation-api</artifactId>
           <version>1.3.2</version>
     </dependency>

1.4 纯注解模式

改造xml+注解模式,将xml中遗留的内容全部以注解的形式迁移出去,最终删除xml,从Java配置类启动

对应注解

@Configuration 注解,表名当前类是⼀个配置类

@ComponentScan 注解,替代 context:component-scan

@PropertySource,引⼊外部属性配置文件

@Import 引⼊其他配置类

@Value 对变量赋值,可以直接赋值,也可以使用 ${} 读取资源配置文件中的信息

@Bean 将方法返回对象加⼊ SpringIOC 容器

感谢各位的阅读,以上就是“Spring-IOC的基础内容有哪些”的内容了,经过本文的学习后,相信大家对Spring-IOC的基础内容有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 进程的基础内容
  2. Java中Spring-IOC容器是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java spring-ioc

上一篇:Devexpress WPF版本有哪些优点

下一篇:MVC后台如何创建Json并使前台接受循环读取

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》