美文网首页
获取bean的几种方式

获取bean的几种方式

作者: 极派GitPai | 来源:发表于2019-08-09 15:53 被阅读0次

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

    相关文章

      网友评论

          本文标题:获取bean的几种方式

          本文链接:https://www.haomeiwen.com/subject/shyhjctx.html