获取bean的几种方式

2019-08-09  本文已影响0人  极派GitPai

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

  /**
   * 根据注入名称获取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

上一篇下一篇

猜你喜欢

热点阅读