創建一個類A
public class A {
}
創建一個類MyFactoryBean,并實現FactoryBean接口
public class MyFactoryBean implements FactoryBean<A> {@Overridepublic A getObject() throws Exception {return new A();}@Overridepublic Class<?> getObjectType() {return A.class;}@Overridepublic boolean isSingleton() {return false;// 注意這里,參考下面的main方法}
}
下面的main方法測試,打印兩次內容不一樣,因為isSingleton返回false,如果把isSingleton方法返回true,則上面兩次打印則相同
public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);A a = ctx.getBean(A.class);System.out.println(a);a = ctx.getBean(A.class);System.out.println(a);
}
上述代碼是根據類型獲取對象A,如果想根據名稱獲取對象A,則代碼如下
public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);Object a = ctx.getBean("myFactoryBean");System.out.println(a);
}
Java bean?如果想根據名稱從spring容器中獲取MyFactoryBean實例,而不是A實例,則
名稱前面需加"&"符號,代碼如下
public static void main(String[] args) throws Exception {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MyFactoryBean.class);Object a = ctx.getBean("&myFactoryBean");System.out.println(a);
}
關于FactoryBean使用方法到此就結束了,挺簡單的,具體原理是在org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean
方法中,調用了getObjectForBeanInstance
方法,而這個方法,又調用了最終實現方法:org.springframework.beans.factory.support.FactoryBeanRegistrySupport#getObjectFromFactoryBean
,可以看到最終實現是在FactoryBeanRegistrySupport類中的,下面是它的類圖
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态