本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7576162
建立时间:2006年5月29日




[Spring]Spring技巧之活用FactoryBean
软件技术

lhwork 发表于 2006/8/8 10:12:26

Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的 对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。在Spring框架内部,AOP相关的功能及事务处理中,很 多地方使用到工厂Bean,本文简单分析工厂Bean的用法。首先回顾一下普通Bean,普通的Bean直接返回指定类(配置中的class属性的值)的一个实例,如下面的bean1将返回一个String字符串:<bean name="bean1" class="java.lang.String"> <constructor-arg value="我是字符串!" /> </bean> 下面,看看一个简单的工厂Bean:import java.util.Date;import org.springframework.beans.factory.FactoryBean;public class FactoryBeanDemo implements FactoryBean { private String name; public void setName(String name) {  this.name=name; } public Object getObject() throws Exception {  if("date".equals(name))return new Date();  else return new String("这是一个字符串!"); } public Class getObjectType() {    return "date".equals(name)?Date.class:String.class; } public boolean isSingleton() {    return false; }}下面看这个工厂Bean的配置:<bean name="myFactoryBean" class="springroad.deomo.chap4.FactoryBeanDemo"/><bean name="myFactoryBean1" class="springroad.deomo.chap4.FactoryBeanDemo"><property name="name" value="date"/></bean>下面是测试代码:Resource res=new ClassPathResource("springroad/deomo/chap4/demo-bean.xml");BeanFactory factory=new XmlBeanFactory(res);System.out.println(factory.getBean("myFactoryBean").getClass());System.out.println(factory.getBean("myFactoryBean1").getClass());输出结果:class java.lang.Stringclass java.util.Date由 此可见,通过使用FactoryBean,我们可以得到不同类型的对象实例。这也就是我们在AOP中通过设置calss为 ProxyFactoryBean可以返回不同类型的业务对象的原理。在实际应用中若能灵活使用FactoryBean,则可以给应用程序增加很多的魔幻 功能。一个小窍门:  FactoryBean还藏有一个技巧,也就是在我们实际需要返回FactoryBean实例时,应该怎么办。也就是我们在应用程序中需要通过容器得到一个FactoryBean。此时,需要使用特殊的方式,即在bean的名称前加上一个特殊符号“&”即可。  如,下面的代码:System.out.println(factory.getBean("&myFactoryBean").getClass()); System.out.println(factory.getBean("&myFactoryBean1").getClass());输出的结果将会是:class springroad.deomo.chap4.FactoryBeanDemoclass springroad.deomo.chap4.FactoryBeanDemo


阅读全文(1560) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144766145 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号