获取bean的几种方式

关键词: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

你可能感兴趣的:(获取bean的几种方式)