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;
    }
}

 

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM