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 [email protected]
 */
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;
    }
}

 相关推荐:

猜你喜欢

转载自www.cnblogs.com/Marydon20170307/p/9120453.html