spring揭秘阅读笔记

applicationContext 继承关系

image.png

beanFactory,BeanDefinitionRegistry,BeanDefintion 继承关系

image.png

关于抽象或继承class的定义

image.png

springbean 生命周期

image.png

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容