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

Heaven helps those who help themselves
资深码农+深耕理财=财富自由
欢迎关注

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

Created by Marydon on 2018-06-01 10:27

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;
    }
}
复制代码

 

 相关推荐:

 

与君共勉:最实用的自律是攒钱,最养眼的自律是健身,最健康的自律是早睡,最改变气质的自律是看书,最好的自律是经济独立 。

您的一个点赞,一句留言,一次打赏,就是博主创作的动力源泉!

↓↓↓↓↓↓写的不错,对你有帮助?赏博主一口饭吧↓↓↓↓↓↓

posted @   Marydon  阅读(5114)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
历史上的今天:
2017-06-01 ORACLE-临时表实战示例
2017-06-01 oracle 常用函数
2017-06-01 sql各种连接详解
2017-06-01 ORACLE-行转列
2017-06-01 IBATIS + ORACLE(二)
2017-06-01 IBATIS+ORACLE(一)
2017-06-01 ORACLE-SQL(二)
点击右上角即可分享
微信分享提示
sorry,本博客所有代码禁止复制,原创代码需扫码支付方可获取!
关闭

1、先加好友再付费,点我加好友;

2、代码不能满足你的需求?加好友付费定制你的专属代码!

3、付费标准及方式,点我查看详情。