1. 程式人生 > >Spring(06)——單例注入多例之注入ApplicationContext

Spring(06)——單例注入多例之注入ApplicationContext

6 單例注入多例之注入ApplicationContext

Spring bean容器中的bean有單例bean,也有多例bean。當我們需要給一個單例beanA注入一個單例beanB,或者給一個多例beanA注入一個多例或單例beanB時,都可以通過配置讓Springbean容器幫我們完成。但如果我們需要給一個單例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()方法,對於實現了該介面的beanSpring將通過排程對應的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所寫)