spring学习总结(二)

3、自动装配

自动装配共有四种方式:

  • autowire="byname":根据属性名自动装配。如果另外一个bean的属性名id于此相同则自动装配
  • autowire="bytype":跟个bean的类型进行自动装配(若IOC容器中有多个与目标Bean类型一致的Bean,spring将无法判定哪个Bean最适合该属性,所以不能执行自动装配)
  • autowire="constructor":根据构造方法自动装配(当bean中存在多个构造器,此种自动装配将会很复杂,不推荐使用)

4、Bean的作用域

bean的作用域共有五种:singleton、prototype、request、session、globaSession

五种作用域中,singleton为缺省作用域,request、session和global session三种作用域仅在基于web的应用中使用(不必关心你所采用的是什么web应用框架),只能用在基于web的Spring ApplicationContext环境。

  • singleton:Singleton是单例类型,就是在创建IOC容器时就自动创建了一个bean的对象,不管你是否使用,他都存在,每次获取到的对象都是个同一个对象。
  • prototype:Prototype是原型类型,它在创建容器时并没有被实例化,而是当我们调用获取bean对象的时候才会去创建对象,每次获取的对象都不是一个对象
  • request:每个HTTP请求都会有各自的bean实例
  • session:在一个HTTP Session中,一个bean定义对应一个实例
  • globaSession:一个全局的HTTP Session中,一个bean定义对应一个实例

5、bean的生命周期

 Bean实例生命周期的执行过程如下:

  • Spring对bean进行实例化,默认bean是单例;

  • Spring对bean进行依赖注入;

  • 如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;

  • 如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;

  • 如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;

  • 如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;

  • 如果bean实现了InitializingBean接口,spring将调用它的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,该方法也会被调用;

  • 如果bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;

  • 此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;

  • 若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用;

  

猜你喜欢

转载自blog.csdn.net/qq_37776015/article/details/82224621