2013年8月5日 星期一

Spring拿Bean的幾種做法

Spring拿Bean的幾種做法:

1. 自動裝載
 在成員參數前加上@Autowired宣告;Spring會試著找到適合該成員參數類型的Bean並賦值。
 缺點是自動裝載必須符合一些條件才能裝載成功。這些條件在下還沒有完全瞭解,因此先不在此說明。不過大抵就是你的bean必須要經由Spring的configuration下去取,Spring才會幫你把物件放進去。你也可以參考底下的討論:
https://stackoverflow.com/questions/19896870/why-is-my-spring-autowired-field-null

2. 從Spring配置中取得
建立ClassPathXmlApplicationContext,再用配置中的名稱從getBean方法取出Bean的實例。
ApplicationContext appctx = new ClassPathXmlApplicationContext("applicationContext.xml");
MyDAO myDAO= (MyDAO)appctx.getBean("myDaoBean");
 缺點有二:首先必須知道配置檔的位置。其次,必須是配置檔中的Bean;即,自動裝載的不適用。

3. 從應用中現存的Bean中找實例
呼叫ContextLoader的getCurrentWebApplicationContext方法,再用Bean的名稱從getBean取實例。
WebApplicationContext wappctx = ContextLoader.getCurrentWebApplicationContext();
wappctx.getBean("myDaoBean");
 缺點有二:必須確保Bean在取用時已被讀入、要知道Bean的一些資訊(名稱或類型);如果Bean是用程式中宣告的方式讀入的,若未決定名稱,則Spring會自行命名,因此你要自己把名字找出來,或是用類型找到所需的實例。


在下的經驗短潛,歡迎大家提供意見。

沒有留言: