IOC知识点详细汇总

在Spring的IOC容器里配置Bean。

  一,基于XML

 

 

 id:Bean的名称,必须唯一,id可以指定多个名字,可用逗号,分号,或空格分隔;class为全类名(反射)。也有通过工厂方法(静态工厂方法&实例工厂方法),FactoryBean两种方式,详细总结在下方。

 

  二,基于注解

 组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。

  (1)首先在Bean里加上相应的注解
主要有以下四种,然后IOC容器实例getBean()时。入参为默认的名称,但如果是接口的实现类,例如XxxImpl,则习惯利用注解的默认value值改为xxx.

 

  (2),配置<context:component-scan>,
      ①,即自动扫描base-package属性所配置的这个包及其子包,所有已标识注解的Bean都将被IOC容器进行管理。
  如果仅希望扫描特定的类而非基包中的所有类,可使用resource-pattern属性指定要扫描的资源。
     ②,context还有两个子节点<context:include-filter>,<context:exclude-filter>作用分别为:包含哪些指定表达式的组件,不包含哪些指定表达式的组件。都可有若干个,支持多种类型的表达式,常用的有annotation,assinable.
       <context:include-filter>需配合使用use-default-filters属性,默认值为true,会包含除include-filter配置外的类,需要把默认值改为false.
(3),如何利用注解来建立bean与bean之间的联系?
      @Autowired   @Resource和@Inject,     常用第一个注解。

 

  重点:类型兼容的Bean:同一个接口的不同实现类,出现异常,有两种解决方案:

  ①使用@Qualifier注解

  ②声明Bean的时候,bean的名字设置为跟属性名或字段名一样的

 

 

 

  三.IOC容器BeanFactory&ApplicationContext概述

   (1)Spring提供了两种类型的IOC容器实现

     ① BeanFactory:面向Spring本身
     ②ApplicationContext:面向使用Spring框架的开发者
    在Spring IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化,只有在容器实例化后,才可以从IOC容器里获取Bean实例并使用。
   (2)从IOC容器中获取Bean实例:
       ①利用id定位到IOC容器中的Bean
       ②利用类型返回IOC容器中的bean,但要求IOC容器中必须只能有一个该类型的bean.

  四.依赖注入的方式

    有三种:①属性注入②构造器注入③工厂方法注入(很少使用,不推荐)

    ①属性注入即通过setter方法注入bean的属性值或依赖的对象。使用<property>元素,使用name属性指定bean的属性名称,value属性或<value>子节点指定属性值。

    ②通过构造方法注入Bean的属性值或依赖的对象,保证了Bean实例在实例化后就可以使用。构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性。

 

 

 

  五.注入属性值细节

   (1),若字面值中包含特殊字符,可以使用<![CDATA[ ]]把字面值包裹起来。

   (2),通过<ref>元素或ref属性为Bean的属性或构造器参数指定对Bean的引用,也可以在属性或构造器里包含Bean的声明,这样的Bean称为内部Bean。当Bean实例仅仅给一个特定的属性使用时,可以将其声明为内部Bean,不需要设置任何id或name属性,因为他不能使用在其他地方。

 

 

     (3),可以使用<null/>元素标签为Bean的字符串或其他对象类型的属性注入null值

     (4),支持级联属性的配置

     (5),可以通过一组内置的Xml标签(例如:<List>,<Set>,<Map>)来配置集合属性

 

 

 

 

 

     (6)使用p命名空间:需要先导入P命名空间,简化了基于XML的配置方式

 

   (7)导入外部文件时:可以在<beans>中添加context schema定义

    <context :property-placeholder location=" "/>         (Spring 2.5以后)

  六.自动装配

  Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式

  ①byType:(根据类型自动装配)若IOC容器中有多个与目标Bean类型一致的Bean,在这种情况下,Spring将无法判断哪个Bean最适合该属性,所以不能执行自动装配。

  ②byName:(根据名称自动装配)必须将目标Bean的名称和属性名设置的完全相同

  ③constructor(通过构造器自动装配)不推荐使用,当Bean存在多个构造器时,此种装配方式将会很复杂。

  在实际项目里很少使用自动装配功能,因为和自动装配所带来的好处比起来,明确清晰的配置文档更有说服力一些。

  七.bean之间的关系:继承与依赖

  ①继承:使用bean的parent属性指定继承哪个bean的配置  。

  八.bean的作用域

 

 

  九.IOC容器中Bean的生命周期

   (1)1.像Tomcat容器管理Servlet生命周期一样,IOC容器管理了Bean的生命周期。
       2. Spring IOC容器对Bean的生命周期进行管理的过程:
      ①通过构造器或工厂方法创建Bean实例
      ②为Bean的属性设置值和对其他Bean的引用。
      ③调用Bean的初始化方法
      ④Bean可以使用了
      ⑤当容器关闭时,调用Bean的销毁方法
     3.在Bean的声明里设置init-method和destroy-method属性,为Bean指定初始化和销毁方法

 

  (2)创建Bean后置处理器
Bean后置处理器允许在调用初始化方法前后对Bean进行额外的处理。需要实现BeanPostProcessor接口。

 

 

 

 

 不需要配置id属性,IOC容器会自动识别。

 

添加Bean的后置处理器之后的生命周期:

          ①通过构造器或工厂方法创建Bean实例

      ②为Bean的属性设置值和对其他Bean的引用。
      ③将Bean实例传递给Bean后置处理器的postProcessBeforeInitialization方法
      ④调用Bean的初始化方法
      ⑤将Bean实例传递给Bean后置处理器的postProcessAfterInitialization方法
      ⑥Bean可以使用了
      ⑦当容器关闭时,调用Bean的销毁方法

十,配置Bean的其他两种方法:

  

静态工厂方法:直接调用某一个类的静态方法就可以返回Bean的实例

 class:指向静态工厂方法的全类名

factory-method:指向静态工厂方法的名字

constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数

 

 

 

 

 

 

 

  实例工厂方法:实例工厂的方法,即需要创建工厂本身,再调用工厂的实例方法来返回Bean的实例。

factory-bean:指向实例工厂方法的Bean。

 

 

 

 

 

 

 

  FactoryBean:需要实现FactoryBean接口。

 

 

 

 

posted @ 2020-02-09 21:24  Boogiever  阅读(438)  评论(0编辑  收藏  举报