标题:
spring装配
[打印本页]
作者:
admin
时间:
2011-11-2 13:03
标题:
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生成。
作者:
admin
时间:
2011-11-2 14:38
spring高级装配
1. 可以使用 abstract,和 parent 来简化重复的 bean配置。
2. 可以用一个 MethodReplacer的实例,对bean的方法进行替换,如:
<bean>
<replace-method name="getContents()" replacer="xx">
</bean>
<bean id=xx class="com.MyMethodReplacer"/>
public class MyMethodReplacer implements MethodReplacer
{
...
}
这种替换,很象方法监听器,方法执行时,自动移化接木,要实现这个,proxy化bean是必须的。
3. 有返回值的方法注入:
<bean class='Test'>
<lookup-method name="getXXX" bean="guitar">
<bean>
class abstract Test
{
...
public abstract Object getXXX();
}
既然是 abstract,factory也能初始化?
4. 非工厂创建的对象,进行DI:
<aop:spring-configured>
<bean id='animal' abstract='true' class='com.Animal'/>
@Configurable("animal")
class Animal{}
5. BeanFactoryPostProcessor.postProcessBeanFactory只对上下文工作起作用。
6. 使用?.properties文件
<bean class='... PropertyPlaceHolderConfigure'>
<list>
<value>jdbc.properties</value>
</list>
</bean>
<bean>
...
<property name="url" value="{jdbc.url}"/>
7. 事件监听:
class MyEvent extends ApplicationEvent{...}
class Dog implements ApplicationContextAware{
context
setcontext(){}
firechange()
}
class Cat implements ApplicationListener
{
onApplicationEvent(e)
{
if(e instanceof MyEvent)
...
}
}
欢迎光临 杰表技术论坛 (http://bbs.jatools.com/)
Powered by Discuz! 6.1.0