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
- instantiate bean对象实例化
- populate properties 封装属性
- 如果实现了BeanNameWare接口,则为bean设置名字(默认的是取id属性的值,若id属性没有值,则设置name的值)
- 如果实现了BeanFactoryWare或者applicationContextWare接口,则为其设置applicationContext
- 如果实现了BeanPostProcessor,则会执行BeanPostProcessor的postProcessBeforeInitialization方法,这个方法有两个参数(Object bean,String beanName)这个方法类似与拦截器,要把bean返回,否则会报nullProintException.这个方法是一个全局的参数,一个bean.xml中之所要配置一次,他会管理整个xml文件中所有的bean
- 如果Bean实现了InitializingBean他会执行型AfterPropertySet()方法
- 执行自定义的init-method方法(需要在bean.xml中配置init-method)一般初始化和销毁都会执行这个方法
- 如果实现了BeanPostProcessor(处理Bean),则会执行afterPostProcessor方法
- 执行业务方法
- 如果实现了DisposableBean接口,执行接口中的destroy方法
- 执行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的主要内容,如果未能解决你的问题,请参考以下文章