• SpringMvc获取getbean


    import org.apache.commons.lang3.Validate;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.DisposableBean;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    
    /**
     * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext.
     * 
     * 
     */
    
    public class SpringContextHolder implements ApplicationContextAware, DisposableBean {
    
        private static ApplicationContext applicationContext = null;
    
        private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class);
    
        /**
         * 取得存储在静态变量中的ApplicationContext.
         */
        public static ApplicationContext getApplicationContext() {
            assertContextInjected();
            return applicationContext;
        }
    
        /**
         * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
         */
        @SuppressWarnings("unchecked")
        public static <T> T getBean(String name) {
            assertContextInjected();
            return (T) applicationContext.getBean(name);
        }
    
        /**
         * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
         */
        public static <T> T getBean(Class<T> requiredType) {
            assertContextInjected();
            return applicationContext.getBean(requiredType);
        }
    
        /**
         * 清除SpringContextHolder中的ApplicationContext为Null.
         */
        public static void clearHolder() {
            logger.debug("清除SpringContextHolder中的ApplicationContext:"
                    + applicationContext);
            applicationContext = null;
        }
    
        /**
         * 实现ApplicationContextAware接口, 注入Context到静态变量中.
         */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) {
    //        logger.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext);
    
            if (SpringContextHolder.applicationContext != null) {
                logger.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:" + SpringContextHolder.applicationContext);
            }
    
            SpringContextHolder.applicationContext = applicationContext; // NOSONAR
        }
    
        /**
         * 实现DisposableBean接口, 在Context关闭时清理静态变量.
         */
        @Override
        public void destroy() throws Exception {
            SpringContextHolder.clearHolder();
        }
    
        /**
         * 检查ApplicationContext不为空.
         */
        private static void assertContextInjected() {
            Validate.validState(applicationContext != null, "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");
        }
    }
       //调用方式
    BackPlateService backPlateService = (BackPlateService) SpringContextHolder.getBean("fyNewBackPlateService");
    <!-- 获取bean工具注入 -->  
    //在applicationContext.xml 注入 <bean id="springContextHolder" class="com.eee.common.utils.SpringContextHolder" lazy-init="false"/>

  • 相关阅读:
    gitlab 国内镜像安装
    docker 安装和启动redis
    jenkins 国内镜像更新地址
    docker 安装 jenkins
    docker 使用阿里云镜像加速
    '
    windows/linux 命令可以用符号连接执行
    思科访问控制列表优先级
    交换机泛洪
    虚拟机floppy0
  • 原文地址:https://www.cnblogs.com/yy123/p/5016099.html
Copyright © 2020-2023  润新知