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

相关推荐:

 

java 从spring容器中获取注入的bean对象的更多相关文章

  1. 从spring容器中取出注入的bean

    从spring容器中取出注入的bean 工具类,代码如下: package com.hyzn.fw.util; import org.springframework.beans.BeansExcept ...

  2. 从Spring容器中获取Bean。ApplicationContextAware

    引言:我们从几个方面有逻辑的讲述如何从Spring容器中获取Bean.(新手勿喷) 1.我们的目的是什么? 2.方法是什么(可变的细节)? 3.方法的原理是什么(不变的本质)? 1.我们的目的是什么? ...

  3. FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean

    前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...

  4. Spring容器中获取bean实例的方法

    // 得到上下文环境 WebApplicationContext webContext = ContextLoader .getCurrentWebApplicationContext(); // 使 ...

  5. [转]使用@Test 也可以从spring容器中获取依赖注入

    转自:http://blog.csdn.net/u010987379/article/details/52091790 @RunWith(SpringJUnit4ClassRunner.class) ...

  6. Tomcat启动后,从spring容器中获取Bean和ServletContext

    public static Object getBean(String beanName){ ApplicationContext context = ContextLoader.getCurrent ...

  7. 【String注解驱动开发】面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?

    写在前面 在前面的文章中,我们知道可以通过多种方式向Spring容器中注册bean.可以使用@Configuration结合@Bean向Spring容器中注册bean:可以按照条件向Spring容器中 ...

  8. 【String注解驱动开发】如何按照条件向Spring容器中注册bean?这次我懂了!!

    写在前面 当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,不 ...

  9. SpringJUnit4加载类目录下(src)和WEF-INF目录下的配置文件二--获取注入的bean的二种方式

    前言: spring容器以xml的形式注入bean,然后可以在类中获取,获取的形式主要有二种:第一种最简单--采用@Resource 或@Autowired关键字在加载spring文件时将bean注入 ...

随机推荐

  1. byte[],bitmap,drawable之间的相互转换

    Byte[]转Bitmap BitmapFactory.decodeByteArray(data, 0, data.length); Bitmap转Byte[] ByteArrayOutputStre ...

  2. 用SparseArray代替HashMap

    SparseArray是android提供的一个工具类,它可以用来替代hashmap进行对象的存储,其内部实现了一个矩阵压缩算法,很适合存储稀疏矩阵的. PS:support包中还提供了兼容的类Spa ...

  3. [Linux] ubuntu各目录含义

    /boot/: 启动文件,所有与系统启动有关的文件都保存在这里 /boot/grub/:grub引导器相关的配置文件都在这里 /dev/:此目录中保存了所有设备文件,例如,使用的分区:/dev/hda ...

  4. modbus.c

    #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //#include ...

  5. django的数据库操作

    ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中,ORM在业务逻辑层和数据库层之间充当了桥梁的作用. django的交互式shell python manage ...

  6. go语言之进阶篇字符串转换

    1.字符串转换 示例: package main import ( "fmt" "strconv" ) func main() { //转换为字符串后追加到字节 ...

  7. SCRIPT5009: “Sys”未定义 部署.net ajax 解决方案

    今天在部署asp.net ajax 的时候发现部署服务器的时候,ajax刷新不正确,开始以为是System.Web.Extensions没有引用到本地,baidu一圈发现(最近google上不了郁闷~ ...

  8. [PowerShell Utils] Automatically Change DNS and then Join Domain

    I would like to start a series of blog posts sharing PowerShell scripts to speed up our solution ope ...

  9. 为什么static数据成员一定要在类外初始化?(转)

    1.避免重复定义和初始化 <<c++ primer>>说在类外定义和初始化是保证static成员变量只被定义一次的好方法. 但,为什么static const int就可以在类 ...

  10. Laravel应用性能调优

    这次性能测试方案中用到的优化技巧主要基于 Laravel 框架本身及其提供的工具. 关闭应用debugapp.debug=false 缓存配置信息php artisan config:cache 缓存 ...