spring学习用笔记spring_day02
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
spring学习用笔记spring_day02
Spring_day02 2007-12-05 星期三
一 , IOC 补充:
1, 继承关系:
得到的bean不想用单例时, 在bean标签上加 Scope=singleton/prototype 二, bean的生命周期(组件的装配过程):
初始化(调用默认的构造器实例化,但是属性还没有赋值)
---> 装配(设置依赖注入,给bean设置属性值)
---> BeanNameAware 接口
方法: setBeanName(); 如果bean实现了这个接口, 便会传递bean的名字给bean;
---> BeanFactoryAware: setBeanFactory() ; 传递BeanFactory 给bean;
---> ApplicationContextAware: setApplicationContext(); 传递ApplicationContext给bean;
---> BeanPostProcessor:
后处理bean;两个方法,postProcessAfterInitialization(Object bean, String
beanName);
Object postProcessBeforeInitialization(Object bean, String
beanName)
容器可以借助后处理bean对所有的其他bean作拦截, 相当于扩充了容器的功能;
SomeBean实现了这个接口: 会对其他bean: A, B, C 的初始化或其他方法做拦截处理;
---> common init()
---> InitializingBean : void afterPropertiesSet() ; 初始化之后设置属性
初始化:<1>. bean实现InitializingBean接口;
<2>. 在配制文件中配置init-method="初始化方法",
这个初始化方法定义在bean类中方法名不做要求;
---> BeanPostProcessor: postProcessAfterInitialization
---> common destroy()
---> DisposableBean: destroy() ; 销毁之前;
销毁:<1>. bean实现DisposableBean接口;
<2>. 在配制文件中配置destroy-method="销毁方法",
这个销毁方法定义在bean类中方法名不做要求;
<1>. ApplicationContext:对于单例对象预先实例化,而对于一般的对象,只有在调用getBean()时才实例化;
<2>. 后处理bean:1,实现了BeanPostProcessor接口的bean;
2,在调用其他bean之前,会做一个指定的特殊处理;
注:
如果发现有一个bean实现了BeanPostProcessor接口, 就会当成特殊的bean 来处理;
会对其他bean的属性进行处理 : 方法里写的内容;
对于实现了BeanPostProcessor 接口的bean, 容器会扫描并自动注册为一个后处理bean,
用来对其他bean做后处理, 在初始化之前, 之后做拦截;
例子: ioc9
客户端调用 getBean 时, 先调用默认构造器, 装配, 后处理;
写一个初始化方法: init() 和销毁方法destroy()
初始化: init-method="init" destroy-method="destroy"
init 方法调用了, 但是destroy方法没有调用;
AbstractApplicationContext ctx;
//调用业务方法;
ctx.registerShutdownHook(); //让容器调用destroy方法;
1)对于单例类型的bean起作用, 没有设置scope="prototype"
2)对非web应用起作用;
2, bean工厂后处理: 例子: ioc9
BeanFactoryPostProcessor:
在容器读完所以的配置文件信息之后, 会调用实现了BeanFactoryPostProcessor
接口的bean来做处理,
bean还没有实例化之前被调用;
还需要在配置文件中注册;
例子:
PropertyPlaceholderConfigurer : 是BeanFactoryPostProcessor的一个实现类;
作用:分散配制,
可以单独配置;
class="org.springframework.beans.factory.config.PropertyPlaceholderConfi gurer">
分散配置, ${database.driver_class} // 在配置文件database.properties 中有;
例子: