zoukankan      html  css  js  c++  java
  • java 从spring容器中获取注入的bean对象

    java 从spring容器中获取注入的bean对象

    CreateTime--2018年6月1日10点22分

    Author:Marydon

    1.使用场景

      控制层调用业务层时,控制层需要拿到业务层在spring容器中注入的对象

    2.代码实现

    import org.apache.struts2.ServletActionContext;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.context.support.WebApplicationContextUtils;
    /**
     * 从spring容器中获取注入的bean对象
     * @explain 必须获取到ServletContext对象,Controller层以struts2为例
     * @author Marydon
     * @creationTime 2018年6月1日上午10:06:49
     * @version 1.0
     * @since
     * @email marydon20170307@163.com
     */
    public final class BeansUtils {
        private static final Logger logger = LoggerFactory.getLogger(BeansUtils.class);
        private static ApplicationContext ctx;
        private static WebApplicationContext webCtx;
        // 静态代码块:加载该类时会被运行的代码
        static {
    
            if (ctx == null) {
                try {
                    // 入参需要拿到ServletContext对象
                    webCtx = WebApplicationContextUtils
                            .getRequiredWebApplicationContext(ServletActionContext.getServletContext());
                    logger.info("从web.xml容器中加载spring-config.xml");
                } catch (Exception e) {
                    logger.info("直接加载spring-config.xml");
                }
                if (webCtx == null)
                    // 你可以自定义spring配置文件的文件名
                    ctx = new ClassPathXmlApplicationContext("spring-config.xml");
            }
        }
    
        /**
         * 通过beanID获取bean实例
         * 
         * @param beanID
         *            bean的代码
         * @return 返回对应的实例
         * @throws RuntimeException
         *             bean没有定义
         */
        public static Object getBeanInstance(String beanID) throws RuntimeException {
            logger.info("在spring容器中获取Bean对象 ID=" + beanID);
            Object obj;
            if (BeansUtils.ctx == null) {
                if (BeansUtils.webCtx.containsBeanDefinition(beanID)) {
                    obj = BeansUtils.webCtx.getBean(beanID);
                } else {
                    logger.info("beanID=" + beanID + "没有定义");
                    throw new RuntimeException(beanID + "没有定义!");
                }
            } else {
                if (BeansUtils.ctx.containsBeanDefinition(beanID)) {
                    obj = BeansUtils.ctx.getBean(beanID);
                } else {
                    logger.info("beanID=" + beanID + "没有定义");
                    throw new RuntimeException(beanID + "没有定义!");
                }
            }
            return obj;
        }
    }

     相关推荐:

  • 相关阅读:
    Express入门
    nodejs入门
    css实现点点点效果
    定时器详解和应用、js加载阻塞、css加载阻塞
    栈内存和堆内存有什么区别?
    webpack入门
    Ubuntu常用命令集合
    HTTP缓存机制
    125. 验证回文字符串
    算法的时间复杂度和空间复杂度(js版)
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/9120453.html
Copyright © 2011-2022 走看看