1. 程式人生 > >spring中ApplicationContextAware介面的應用

spring中ApplicationContextAware介面的應用

為什麼使用ApplicationContextAware介面:

在spring專案中,類之間的關係是spring容器來管理的,但是一個專案中有些類不受spring容器管理缺需要使用受spring管理的bean,這時候不能通過正常的方式注入bean,這時候spring給我們提供了ApplicationContextAware介面,我們可以編寫一個工具類來實現ApplicationContextAware,通過工具類來獲取我們需要的bean然後供不在spring容器中的類呼叫,具體程式碼如下:

工具類 SpringUtils.java

import org.springframework.beans.
BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; //此處使用註解的方式把工具類加入到容器中,可以使用xml,配置類等方式,必須要加入到容器中 @Component public
class SpringUtils implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringUtils.applicationContext == null){ SpringUtils.applicationContext =
applicationContext; } } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name){ return getApplicationContext().getBean(name); } public static <T> T getBean(Class<T> clazz){ return getApplicationContext().getBean(clazz); } public static <T> T getBean(String name,Class<T> clazz){ return getApplicationContext().getBean(name, clazz); } }

容器外類 xxx.java

public class TestAppContext{
	//需要獲取的bean
	private Person person;
	public String getPersonName(){
		//通過bean的名稱來獲取bean
		person = (Person)SpringUtils.getBean("person");
		return person.getName();
	}
}

注:這種方式針對的是使用spring管理的web工程,spring容器在專案啟動時開始建立。