關(guān)鍵詞:applicationcontext肩祥、ServletContext、Spring 的bean獲取
獲取bean的幾種方式
方法一:在初始化時保存ApplicationContext對象
方法二:通過Spring提供的utils類獲取ApplicationContext對象
方法三:繼承自抽象類ApplicationObjectSupport
方法四:繼承自抽象類WebApplicationObjectSupport
方法五:實現(xiàn)接口ApplicationContextAware
方法六:通過Spring提供的ContextLoader
最后的解決方式為:
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
/**
* bean操作輔助類砚哆,獲取spring注入的bean独撇。<br>
* 如果在Junit單元測試中獲取ApplicationContext實例,兩種方法:<br>
* 1)直接注入 @Autowired protected ApplicationContext ctx;<br>
* 2)測試類繼承(AbstractJUnit4SpringContextTests躁锁,此時不需要寫@RunWith)<br>
* @ContextConfiguration(locations = { "/spring/applicationContext.xml" })<br>
* public class SpringTest extends AbstractJUnit4SpringContextTests{ }<br>
* 然后在代碼中直接使用“applicationContext”成員變量即可
* @author TP
*
*/
public final class ApplicationContextUtil
{
private static ApplicationContext appContext;
/**
* 根據(jù)注入名稱獲取spring中的bean對象
* @param name
* @return
*/
public static Object getBean(String name)
{
if(appContext==null){
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
appContext=wac;
}
return appContext.getBean(name);
}
/**
* 判斷bean是否存在
* @param name
* @return
*/
public static boolean containsBean(String name) {
if(appContext==null){
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
appContext=wac;
}
return appContext.containsBean(name);
}
/**
* 外部傳入Spring Bean對象管理上下文
* @param appContext
*/
public static void setApplicationContext(ApplicationContext appContext)
{
ApplicationContextUtil.appContext=appContext;
}
}
即先獲取ApplicationContext 獲取不到再用這個
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
appContext=wac;
代碼還可以再繼續(xù)完善下纷铣,看下ApplicationContext變成靜態(tài)任何地方都可以獲取啥的,可以參考這個https://www.cnblogs.com/jinzhiming/p/6256878.html
主要參考:
https://www.cnblogs.com/yjbjingcha/p/6752265.html
其他參考:
https://www.cnblogs.com/jinzhiming/p/6256878.html
https://www.cnblogs.com/kxdblog/p/5988027.html
https://www.cnblogs.com/zeng1994/p/cf6f754e69da87a46f449aee93dca9d9.html
https://www.cnblogs.com/windyWu/p/4708514.html
https://www.cnblogs.com/xiaxinggege/p/5893160.html