关键词:applicationcontext、ServletContext、Spring 的bean获取
获取bean的几种方式
方法一:在初始化时保存ApplicationContext对象
方法二:通过Spring提供的utils类获取ApplicationContext对象
方法三:继承自抽象类ApplicationObjectSupport
方法四:继承自抽象类WebApplicationObjectSupport
方法五:实现接口ApplicationContextAware
方法六:通过Spring提供的ContextLoader
最后的解决方式为:
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext;
/**
* bean操作辅助类,获取spring注入的bean。
* 如果在Junit单元测试中获取ApplicationContext实例,两种方法:
* 1)直接注入 @Autowired protected ApplicationContext ctx;
* 2)测试类继承(AbstractJUnit4SpringContextTests,此时不需要写@RunWith)
* @ContextConfiguration(locations = { "/spring/applicationContext.xml" })
* public class SpringTest extends AbstractJUnit4SpringContextTests{ }
* 然后在代码中直接使用“applicationContext”成员变量即可
* @author TP
*
*/
public final class ApplicationContextUtil
{
private static ApplicationContext appContext;
/**
* 根据注入名称获取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;
代码还可以再继续完善下,看下ApplicationContext变成静态任何地方都可以获取啥的,可以参考这个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
https://blog.csdn.net/m0_37837382/article/details/82768782
https://blog.csdn.net/handsome_le/article/details/80846404