1.利用ApplicationContext来获取bean对象,bean的生命周期
当bean被载入容器时,他的生命周期就开始了。
(1)实例化
当我们加载bean.xml文件时,就开始实例化了,实例化到内存,前提是scope=singleton)---当实例化时,构造方法先被调用)
(2)设置属性(前提是要有一个对应的set方法)
调用set方法设置属性
(3)调用BeanNameAware的setBeanName()方法
如果你实现了BeanNameAware接口,则可以通过setBeanName来获取bean的id
(4)调用BeanFactoryAware的setBeanFactory()方法
该方法可以传递beanFactory,如果你实现BeanNameAware接口,则可以获取beanFactory
(5)调用ApplicationContextAware的setApplicationContext()方法
如果你实现ApplicationContextAware接口,则可以得到ApplicationContext
(6)若BeanPostProcessor(后置处理器,具体介绍在下面)和bean关联后(关联:先建一个类myBeanPostProcessor来实现BeanPostProcessor,再在beans.xml配置一下)
postProcessBeforeInitialzation()方法先被调用。(预初始化方法)
(7)若你实现了InitializingBean接口,则会调用afterPropertiesSet
(8)调用定制的初始化方法,在beans.xml文件bean中写
(9)调用后初始化方法postProcessAtfterInitialzation()
(10)使用我们的bean
(11)容器关闭
(12)调用DisposableBean接口的destory()方法
包括关闭数据连接、socket、文件流释放bean占用的资源,不习惯用
(13)第12步的方法少用,经常用自己定制的销毁方法,在beans.xml中设置
原理图:
2.关于BeanPostProcessor(后置处理器)
--在用后置处理器时,我们可以建一个类myBeanPostProcessor来实现BeanPostProcessor,其中有两个方法before、after
--在beans.xml配置一下,就会被自动调用,先是before()再是after()
--BeanPostProcessor有点类似于web里的filter过滤器
--需求应用:1.记录每个对象被实例化的时间
2.过滤每个调用对象的ip
3.给所有对象添加属性
--这些应用体现了AOP编程(面向切面编程,针对所有对象编程)
3.小结
实际开发中没用到这么多过程,则常用的过程为:1>2>6>9>10>11>13
4.通过bean工厂来获取bean,bean的生命周期
1>2>3>4>7>8>10>11>12>13
5.代码实现
userService
userServicemyBeanPostProcessor
myBeanPostProcessorbeans.xml
beans.xmltestBean
testBean
网友评论