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

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 如何从spring容器中获取注入的bean对象的详细内容,更多关于Java获取bean对象的资料请关注我们其它相关文章!

(0)

相关推荐

  • java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解

    O/R Mapping 是 Object Relational Mapping (对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据.在 O/R Mapping 的世界里,有两个基本的也是重要的东东需要了解,即 VO , PO . VO ,值对象 (Value Object) , PO ,持久对象 (Persisent Object) ,它们是由一组属性和属性的 get 和 set 方法组成.从结构上看,它们并没有什么不同的地方.但从其意义和本质上来看是完全不同的.

  • 通过实例了解JavaBean开发及使用过程解析

    一.JavaBean简介 JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁.JSP搭配JavaBean来使用,有以下的优点: 1.可将HTML和Java代码分离,这主要是为了日后维护的方便.如果把所有的程序代码(HTML和Java)写到JSP页面中,会使整个程序代码又多又复杂,造成日后维护上的困难. 2.可利用JavaBean的优点.将日常用到的程序写成JavaBean组件,当在JSP要使用时,只要调用J

  • Java Bean与xml互相转换的方法分析

    本文实例讲述了Java Bean与xml互相转换的方法.分享给大家供大家参考,具体如下: XML和Java Bean互相转换是一个很有用的功能,因为两者有着前后合作的关系,但解析的过程比较痛苦.下面介绍如何进行XML和Java Bean的互相转换. 最近项目中用到了xml和java bean的转换 用到xml的时候我们需要遍历解析...然后将解析的值放入声明好的java bean,过程很痛苦,结果很美好 我们能不能直接从xml转化到java bean呢,或者直接成java bean转化到xml呢

  • Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作

    通过反射根据提供的表名.POJO类型.数据对象自动生成sql语句. 如名为 User 的JavaBean与名为 user 的数据库表对应,可以提供一个封装有数据的User对象user,根据user中含有的数据自动生成sql语句. 1.生成插入语句(插入user中包含的非空数据的语句): String insertSql = getInsertSql("user", User.class, user); 2.生成更新语句(user中id不能为空): String updateSql =

  • 通过实例解析POJO和JavaBean的区别

    POJO POJO(Plain Ordinary Java Object)即普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO. 实际意义就是普通的JavaBeans(简单的实体类),特点就是支持业务逻辑的协助类. POJO类的作用是方便程序员使用数据库中的数据表,对于程序员来说,可以很方便的将POJO类当作对象来进行使用,也可以方便的调用其get,set方法. 但不允许有业务方法,也不能携带有connection之类的方法,即不包含业务逻辑或持久逻辑等. Jav

  • Java中json与javaBean几种互转的讲解

    一.java普通对象和json字符串的互转 java对象---->json 首先创建一个java对象: public class Student { //姓名 private String name; //年龄 private String age; //住址 private String address; public String getName() { return name; } public void setName(String name) { this.name = name; }

  • AndroidStudio插件GsonFormat之Json快速转换JavaBean教程

    安装 方法一: 1.Android studio File->Settings..->Plugins–>Browse repositores..搜索GsonFormat 2.安装插件,重启android studio 方法二: 1.下载GsonFormat.jar ; 2.Android studio File->Settings..->Plugins –>install plugin from disk..导入下载GsonFormat.jar 3.重启android

  • java Beanutils.copyProperties( )用法详解

    这是一篇开发自辩甩锅稿~~~~ 昨天测试小姐姐将我的一个bug单重开了,emmmm....内心OS:就调整下对象某个属性类型这么简单的操作,我怎么可能会出错呢,一定不是我的锅!!but再怎么抗拒,bug还是要改的,毕竟晚上就要发版本了~~ 老老实实将我前天改的部分跟了一遍,恩,完美,没有任何的缺失~~but本应success的测试数据,接口返还的结果确实是false来着,那还是老老实实debug吧. 一步步跟下来,恩,多么顺畅,就说一定不是我的锅~~诶?不对不对,这里的ID值,为啥是null?传

  • 简单了解JavaBean作用及常用操作

    一.什么是 javabean ? 在jsp页面中,包含html代码.css代码.java代码.以及业务逻辑处理代码等.javabean的作用就是将html代码与java代码分离,**将java代码单独封装成一个处理某种业务逻辑的类**,然后在jsp中调用该类,实现降低耦合多和简化页面的作用. javabean是特殊的java类,具有以下特征 提供一个默认的无参构造函数. 需要被序列化并且实现了 Serializable 接口. 可能有一系列的 getter 或 setter 方法,决定了读.写属

  • NetBeans安装提示neatbeans cannot find java 1.8 or higher

    1 问题 安装NetBeans的时候,点击bin目录下的netbeans64.exe,然后提示错误 neatbeans cannot find java 1.8 or higher 然后我在终端输入java -version是1.8 C:\Users\User>java -version java version "1.8.0_65" Java(TM) SE Runtime Environment (build 1.8.0_65-b17) Java HotSpot(TM) 64-

随机推荐