Spring(06)——單例注入多例之注入ApplicationContext
阿新 • • 發佈:2019-01-01
6 單例注入多例之注入ApplicationContext
Spring bean
容器中的bean
有單例bean
,也有多例bean
。當我們需要給一個單例beanA
注入一個單例beanB
,或者給一個多例beanA
注入一個多例或單例beanB
時,都可以通過配置讓Spring
的bean
容器幫我們完成。但如果我們需要給一個單例beanA
注入一個多例beanB
時,僅僅通過配置Spring
是無法幫我們的單例beanA
注入一個多例beanB
的,即無法讓我們每次使用beanB
時都使用的是一個全新的beanB
。因為beanA
只初始化一次,相對應的Spring
只會給beanA
注入一個beanB
。解決辦法是給beanA
ApplicationContext
,這樣我們就可以在每次需要使用beanB
時都從ApplicationContext
中獲取一個新的beanB
。注入
ApplicationContext
有兩種方式,實現ApplicationContextAware
介面和通過@Autowired
或@Resource
註解標註讓Spring
進行自動注入。6.1 實現ApplicationContextAware介面
ApplicationContextAware
介面中定義了一個setApplicationContext()
方法,對於實現了該介面的bean
,Spring
將通過排程對應的setApplicationContext()
ApplicationContext
傳遞過去。public class Hello implements ApplicationContextAware { private ApplicationContext applicationContext; /** * Spring將通過該方法給我們的bean注入當前的ApplicationContext */ public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } }
6.2 通過註解標註
我們知道在使用註解進行配置時,我們也可以通過註解來告訴Spring
要為當前的bean
注入哪些內容。對於ApplicationContext
也是一樣的,我們可以通過對應的註解來告訴Spring
將為我們注入對應的ApplicationContext
。自動注入的註解可以是@Resource
,也可以是@Autowired
。
public class Hello { private ApplicationContext applicationContext; @Resource public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } }
(注:本文是基於Spring4.1.0所寫)