spring FactoryBean的知识应用和Beanfactory的区别
生活随笔
收集整理的這篇文章主要介紹了
spring FactoryBean的知识应用和Beanfactory的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
BeanFactory:是Spring的一個工廠它能夠得到Spring工廠給創建的Bean,能通過getBean()方法獲得。
FactoryBean:是一個特殊的Bean,Spring管理它的時候會對實現這個接口的類前面加一個(&)字符。而它的名字則是表示getObject中得到的Bean。主要的作用是別的Bean屬性或者依賴太多的情況下,都可以通過FactoryBean生成不太容易的Bean,然后對外提供簡單化的Bean
public class TempDaoFactoryBean {public void test(){System.out.println("bean");} } /*** 如果你的類實現了FactoryBean* 那么Spring容器中會存在兩個對象* 一個是getObject返回的對象* 一個是當前對象** getObject得到的名字是當前類指定的名字,也就是Spring中daoFactoryBean對應的對象** 當前對象是當前類的名字是“&”+當前類的名字** */ @Component("daoFactoryBean") public class DaoFactoryBean implements FactoryBean {public void testBean(){System.out.println("testBean");}public Object getObject() throws Exception {return new TempDaoFactoryBean();}public Class<?> getObjectType() {return null;}public boolean isSingleton() {return false;} }依賴關系比較復雜的時候可以使用FactoryBean,例如SqlSessionFactoryBean,就是使用的Factory這種模式,對外進行簡化它的龐大資源配置的。
簡單一個例子來模擬龐大的復雜關系
package com.FactoryBeanPackage;import org.springframework.beans.factory.FactoryBean;public class DaoFactoryBean implements FactoryBean {private String msg;public void setMsg(String msg) {this.msg = msg;}public void testBean(){System.out.println("testBean");}public Object getObject() throws Exception {TempDaoFactoryBean temp=new TempDaoFactoryBean();String msgArrags[]=msg.split(",");temp.setMsg(msgArrags[0]);temp.setMsg2(msgArrags[1]);temp.setMsg3(msgArrags[2]);return temp;}public Class<?> getObjectType() {return null;}public boolean isSingleton() {return false;} } package com.FactoryBeanPackage;public class TempDaoFactoryBean {private String msg;private String msg2;private String msg3;public void setMsg(String msg) {this.msg = msg;}public void setMsg2(String msg2) {this.msg2 = msg2;}public void setMsg3(String msg3) {this.msg3 = msg3;}public String getMsg() {return msg;}public String getMsg2() {return msg2;}public String getMsg3() {return msg3;}public void test(){System.out.println("bean");} } package com.FactoryBeanPackage;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext act=new AnnotationConfigApplicationContext(SpringDaoFactoryConfig.class);TempDaoFactoryBean daoFactoryBean= (TempDaoFactoryBean) act.getBean("daoFactor");System.out.println(daoFactoryBean.getMsg());} } package com.FactoryBeanPackage;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource;@Configuration @ComponentScan(value = "com.FactoryBeanPackage") @ImportResource("classpath:spring.xml") public class SpringDaoFactoryConfig { }?
?
?
?
?
總結
以上是生活随笔為你收集整理的spring FactoryBean的知识应用和Beanfactory的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态代理源码分析,实现自己的动态代理
- 下一篇: 模拟springIOC容器的annota