spring IOC DI LifeCycle

Posted zhaiwei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring IOC DI LifeCycle相关的知识,希望对你有一定的参考价值。

spring IOC

创建javaBean工厂的三种方式:

1.BeanFactory bf = new XmlBeanFactory(new ClassPathResource("bean.xml"));

技术分享图片

BeanFactory:spring管理JavaBean的顶级接口,直接用这个接口创建的工厂有延迟加载的作用

常用的有ApplicationContext  ac = new ClassPathXmlAppliactionContext("bean.xml");创建时就加载bean.xml所有的bean. 

 通常IOC和DI是结合使用

IOC:控制反转,是指不再由程序员去创建类的的实例,而统统交给spring容器去管理类,由容器去创建类的实例,由容器管理类的生命周期

DI:属性注入

原理:IOC是通过java的反射机制去创建类的实例,可以通过类的构造器去为类进行初始化

Class clazz = Class.forName("类的全路径");

Object object = clazz.newInstance();

默认的情况下时调用类的无参构造<bean id="" class =""></bean> 默认的scope是singleton 

scope有四个取值范围:

singleton(单例,在容器里只有一个bean的实例对象)

prototype(非单例,每次调用getBean("")都会创建一个新的实例),

request(创建一个bean的实例,放入request域中)

session(创建一个bean的实例,放入session域中)

根据无参构造对javaBean初始化

<bean>

<property name="" value="" ref=""/>

name:属性的名字 value:基本数据类型的属性 ref:应用数据类型的属性,若是集合类型的数据<property>中有list,array,set,map,props类型的子标签

</bean>

根据有参构造方法对bean初始化

<bean>

<construction-arg index="" value="" ref="" type="" name=""/>

index:参数的位置.value:基本数据类型的赋值  ,type数据的类型,  ref:复杂类型的赋值,类型是集合类型时要配合<util>使用   name:形参的名字

</bean>

 当用构造方法去初始化类的时候,参数的个数个类型要一一对应,否则报错

 Spring的生命周期LifeCycle

技术分享图片

  1. instantiate bean对象实例化
  2. populate properties 封装属性
  3. 如果实现了BeanNameWare接口,则为bean设置名字(默认的是取id属性的值,若id属性没有值,则设置name的值)
  4. 如果实现了BeanFactoryWare或者applicationContextWare接口,则为其设置applicationContext
  5. 如果实现了BeanPostProcessor,则会执行BeanPostProcessor的postProcessBeforeInitialization方法,这个方法有两个参数(Object bean,String beanName)这个方法类似与拦截器,要把bean返回,否则会报nullProintException.这个方法是一个全局的参数,一个bean.xml中之所要配置一次,他会管理整个xml文件中所有的bean
  6. 如果Bean实现了InitializingBean他会执行型AfterPropertySet()方法
  7. 执行自定义的init-method方法(需要在bean.xml中配置init-method)一般初始化和销毁都会执行这个方法
  8. 如果实现了BeanPostProcessor(处理Bean),则会执行afterPostProcessor方法
  9. 执行业务方法
  10. 如果实现了DisposableBean接口,执行接口中的destroy方法
  11. 执行destroy-method方法(需要在bean.xml中指定destroy-method方法)

  执行10和11步,需要调用ClassPathXmlApplicationContext中的close方法;

  3-4步是为了为bean设置容器的参数,让bean了解bean

  5,8步是增强bean的功能

  6和10,7和11是初始化和销毁bean 7,11耦合性低,常用7,11而不用6和10;

以上是关于spring IOC DI LifeCycle的主要内容,如果未能解决你的问题,请参考以下文章

spring ioc Di

Spring中IOC与DI的的区别

JAVA-Spring框架之IOC(DI)

Spring IOC/DI

spring 依赖注入(DI)与控制反转(IOC)

spring IOC(DI)