applicationContext 继承关系
beanFactory,BeanDefinitionRegistry,BeanDefintion 继承关系
关于抽象或继承class的定义
springbean 生命周期
ThreadScope默认没有注册, 需要手工注册该 scope
Scope threadScope = new ThreadScope();
beanFactory.registerScope("thread",threadScope);
用CustomScopeConfigurer 配置注册scope
<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="thread" value="com.foo.ThreadScope"/>
</map>
</property>
</bean>
更多Scope相关的实例,可以参照同一站点的一篇文章“More fun with Spring scopes”(http://jroller.
com/eu/entry/more_fun_with_spring_scopes)
factoryMethod的使用
静态工厂的使用
<bean id="bar" class="...StaticBarInterfaceFactory" factory-method="getInstance"/>
非静态工厂使用
<bean id="barFactory" class="...NonStaticBarInterfaceFactory"/> <!-- 要先实例化 -->
8 <bean id="bar" factory-bean="barFactory" factory-method="getInstance"/>
prototype scope bean 陷阱
@autowire
FXNewsBean fx; // 如果当前bean 是singleScope的, 该 fx在当前bean里永远只有一份。 但其与其他bean 不共用。如果当前bean 每次都 想用新的, 参见以下代码
public class MockNewsPersister implements IFXNewsPersister,BeanFactoryAware {
private BeanFactory beanFactory;
public void setBeanFactory(BeanFactory bf) throws BeansException {
this.beanFactory = bf;
}
15 public void persistNews(FXNewsBean bean) {
persistNews();
}
public void persistNews()
{ 16 System.out.println("persist bean:"+getNewsBean());
}
17 public FXNewsBean getNewsBean() {
return beanFactory.getBean("newsBean");
}
}
ObjectFactoryCreatingFactoryBean
public class MockNewsPersister implements IFXNewsPersister {
private ObjectFactory newsBeanFactory;
public void persistNews(FXNewsBean bean) {
persistNews();
}
public void persistNews()
{
System.out.println("persist bean:"+getNewsBean());
}
public FXNewsBean getNewsBean() {
return newsBeanFactory.getObject();
}
public void setNewsBeanFactory(ObjectFactory newsBeanFactory) {
this.newsBeanFactory = newsBeanFactory;
}
}
PropertyPlaceholderConfigurer (小心PropertyOverrideConfigurer)
PropertyPlaceholderConfigurer不单会从其配置的properties文件中加载配置项,同时还会检
查Java的System类中的Properties,可以通过setSystemPropertiesMode()或者setSystemPropertiesModeName()来控制是否加载或者覆盖System相应Properties的行为。PropertyPlaceholderConfigurer提供了SYSTEM_PROPERTIES_MODE_FALLBACK、SYSTEM_PROPERTIES_MODE_NEVER和SYSTEM_
PROPERTIES_MODE_OVERRIDE三种模式。默认采用的是SYSTEM_PROPERTIES_ MODE_FALLBACK,即如
http://showmecode.cn/links/book http://blog.csdn.net/jiongyi1
4.4 容器背后的秘密 69
果properties文件中找不到相应配置项,则到System的Properties中查找,我们还可以选择不检查System
的Properties或者覆盖它。更多信息请参照PropertyPlaceholderConfigurer的Javadoc文档
PropertyEditorSupport
<bean class="org.springframework.bean
<property name="customEditors">
<map>
<entry key="java.util.Date">
<ref bean="datePropertyEditor"/>
</entry>
</map>
</prop
</bean>