692
京東網上商城
FactoryBean的使用
FactoryBean的使用
一般情況下,Spring通過反射機製利用Bean的class來實例化Bean,但有的情況下實例化Bean過程比較複雜,如果使用需要大量配置,或者使用@Bean在注釋方法中需要寫大量代碼。Spring為此給我們提供了一個org.springframework.bean.factory.FactoryBean<T>
的工程類接口,用戶可以實現該接口用於實例化一個類的邏輯。
public interface FactoryBean<T> {
boolean isSingleton(); //由FactoryBean創建的bean是 singleton還是prototype
Class<?> getObjectType(); //獲取FactoryBean創建的bean類型
T getObject() throws Exception; //返回FactoryBean創建的bean實例,如果isSingleton()返回為true,則該實例會被放到Spring單例緩衝池中
}
注意:
當我們注冊一個FactoryBean類型到Spring容器中後,再去獲取FactoryBean對應bean時,返回的類型不是FactoryBean,而是FactoryBean創建的對象,如果要獲取FactoryBean本身,那要加上前綴&
.
class Dog{
public String name = "dog";
}
//實現FactoryBean接口,用於創建Dog的bean
class DogFactoryBean implements FactoryBean<Dog>{
@Override
public Dog getObject() throws Exception {
return new Dog();
}
@Override
public Class<?> getObjectType() {
return Dog.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
public class SpringDemo {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext
= new AnnotationConfigApplicationContext();
applicationContext.register(DogFactoryBean.class); //注冊一個FactoryBean類型
applicationContext.refresh();
//獲取剛剛注冊的DogFactoryBean,實際返回的是DogFactoryBean創建的Dog
Object dog = applicationContext.getBean("dogFactoryBean");
System.out.println(dog);// 打印結果com.example.Dog@480bdb19
//加上&就可以獲取剛剛注冊的DogFactoryBean
Object dogFactoryBean = applicationContext.getBean("&dogFactoryBean");
System.out.println(dogFactoryBean);// 打印結果com.example.DogFactoryBean@2a556333
}
}
最後更新:2017-04-11 17:31:02
上一篇:
論文導讀:對抗樣本與學習
下一篇:
盤點2017年大數據、雲計算產業將要舉辦的大會
Windows Server 2008 R2 中 Web 服務器 (IIS) 角色的新增功能
【黃教主再放核彈】英偉達超級計算機SaturnV升級,有望殺入Top500榜單前五
黑客:站在十字路口的孤獨者
http://www.91wzg.com/study/20543_zh.html
MaxCompute大數據實踐,電商數據倉庫的星型模型和傳統星型的區別
Only the original thread that created a view hierarchy can touch its views——Handler的使用
《Spark官方文檔》Spark Streaming編程指南(二)
javascript數組操作大全,數組方法總匯
阿裏雲入選 Gartner 2017年全球雲基礎設施即服務魔力象限
ubuntu12.04環境下使用kvm ioctl接口實現最簡單的虛擬機