欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java 如何从spring容器中获取注入的bean对象

时间:2021-07-01 08:52:59|栏目:JAVA代码|点击:

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

上一篇:微信公众帐号开发教程之图文消息全攻略

栏    目:JAVA代码

下一篇:SpringMVC+Spring+Mybatis实现支付宝支付功能的示例代码

本文标题:Java 如何从spring容器中获取注入的bean对象

本文地址:http://www.codeinn.net/misctech/151047.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有