spring装配
参考: 《spring in action》
1. DI依赖注入,也称ioc,是一个对象a要用到另一个对象b时,b已经存在了。就象一个人(a)当需要shopping时,钱包(b)已经被放在a的口袋里了,多好:)。
2. 管理对象的整个生命周期(从new 到finalize),都在容器的控制之下。
3. 两类容器,beanfactory,和applicationfactory,后者可以进行事件管理。后者继承自前者。
4. xmlbeanfactory是一种beanfactory,需要一个配置文件Resource,作为参数。
5. beanfactory单实例,是延迟加载,而applicationfactory则一次加载完成。
6. beanfactory对bean创建的介入次序:
a. beannameaware.setBeanName
b. beanfactoryaware.setBeanFactory
c. applicationcontextaware.setapplicationcontext. 只对 ApplicationBeanFactory
d. beanpostprocessor.postProcessBeforeInitialization ?经测试,没调用
e. initializingbean.afterPropertiesSet
f. bean.init-method,在配置文件里,设置 init-method属性。
g. beanpostprocessor.postProcessAfterInitialization,同样没调用
ok!可用。
7. 可以配置 constructor-arg属性,让工厂调用带参数构造函数创建bean.
8. 可使用匿名bean作为参数,注入另一个bean中,如:
<bean ...><property name="car"><bean class='xxx.Car' ></property>..
9. 可以给集合赋值的元素有 <ref>,<value>,<null/>,<bean>.
10. 集合元素
a. <list><ref(value/null/bean)>...
b. <set><ref(value/null/bean)>...
c. <map><entry key=? value-ref=?>
d. <props><prop key=?>?</prop>
11. 赋空值为 <null/>, 如: <property name='words'><null/></..>
12. 按属性自动装配
a. 将 bean的autowire="byName"
b. 需要装配的对象,必须有 setXXX方法 ,光有xxx的field还不行,这跟annotation有区别?
原理是,factory创建一个bean后,如果发现是autowire,则查找所有可能的setXXX方法,如果方法找到,类型匹配,则自动设置之。
13. autowire可取值是 byName,byType,constructor,autodetect,我感觉byName最有用,其他三个,太灵活,没有啥实际价值。
14. 可以使用scope来控制,每次请求bean时,生成一个bean实例。
15. scope取值可以是 singleton、prototype、request、session、global-session,默认是 singleton
16. 可以使用 factory-method ,配置一个创建bean的工厂方法。
17. 可以使用 init-method,来定义bean初始方法。
18. 可以使用 destroy-method,来定义bean的销毁方法。
19. 可以使用 default-init-method,default-destroy-method来定义全局的默认初始化,销毁方法。
20. 可以使用initializingBean(afterPropertiesSet),和 disposablebean控制bean生成。