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;
}
}
相关推荐:
java 从spring容器中获取注入的bean对象的更多相关文章
- 从spring容器中取出注入的bean
从spring容器中取出注入的bean 工具类,代码如下: package com.hyzn.fw.util; import org.springframework.beans.BeansExcept ...
- 从Spring容器中获取Bean。ApplicationContextAware
引言:我们从几个方面有逻辑的讲述如何从Spring容器中获取Bean.(新手勿喷) 1.我们的目的是什么? 2.方法是什么(可变的细节)? 3.方法的原理是什么(不变的本质)? 1.我们的目的是什么? ...
- FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean
前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...
- Spring容器中获取bean实例的方法
// 得到上下文环境 WebApplicationContext webContext = ContextLoader .getCurrentWebApplicationContext(); // 使 ...
- [转]使用@Test 也可以从spring容器中获取依赖注入
转自:http://blog.csdn.net/u010987379/article/details/52091790 @RunWith(SpringJUnit4ClassRunner.class) ...
- Tomcat启动后,从spring容器中获取Bean和ServletContext
public static Object getBean(String beanName){ ApplicationContext context = ContextLoader.getCurrent ...
- 【String注解驱动开发】面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?
写在前面 在前面的文章中,我们知道可以通过多种方式向Spring容器中注册bean.可以使用@Configuration结合@Bean向Spring容器中注册bean:可以按照条件向Spring容器中 ...
- 【String注解驱动开发】如何按照条件向Spring容器中注册bean?这次我懂了!!
写在前面 当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,不 ...
- SpringJUnit4加载类目录下(src)和WEF-INF目录下的配置文件二--获取注入的bean的二种方式
前言: spring容器以xml的形式注入bean,然后可以在类中获取,获取的形式主要有二种:第一种最简单--采用@Resource 或@Autowired关键字在加载spring文件时将bean注入 ...
随机推荐
- 应用内截屏的代码,在Activity中测试可用
截屏功能让我十分头疼,想做个无需root的又找不到资料.这里暂且分享一个无需root的,在应用内截屏的代码,本文转自:http://blog.csdn.net/csh159/article/detai ...
- 前端框架amaze ui
支持jquery.react 支持web.移动端 http://t.amazeui.org/#/docs/getting-started?_k=syk56p http://dingtalk.amaze ...
- FinalizableReference, FinalizablePhantomReference, FinalizableReferenceQueue
FinalizableReference /* * Copyright (C) 2007 The Guava Authors * * Licensed under the Apache License ...
- 【UOJ Round #5】
构造+贪心/数论 为什么只有两个标题呢……因为第二题我不会…… 怎样提高智商 构造题……然而一开始半天我都yy不出来…… 后来我想:这题应该不会特别麻烦,而且既然样例只给了1,可能再给大一点就让人发现 ...
- SSI(Server Side Include)简单介绍
Server-side include(server端包含) Server-side include(server端包含)是浏览器向server请求您的文档时并入您的文档的一个文件. 当訪问者浏览器请 ...
- nginx源代码分析之内存池实现原理
建议看本文档时结合nginx源代码. 1.1 什么是内存池?为什么要引入内存池? 内存池实质上是接替OS进行内存管理.应用程序申请内存时不再与OS打交道.而是从内存池中申请内存或者释放内存到内存池 ...
- go语言之进阶篇通过switch实现类型断言
1.通过switch实现类型断言 示例: package main import "fmt" type Student struct { name string id int } ...
- iOS 加密的3种方法
//需要导入 #import <CommonCrypto/CommonCryptor.h> ==============MD5加密============ NSString *str ...
- JSTL fn:contains()函数
fn:contains() 函数判断一个输入字符串是否包含一个指定的子串. 语法 使用 fn:contains() 函数具有以下语法: boolean contains(java.lang.Strin ...
- 用eclipse 玩转cocos 2dx开发
开始研究cocos2dx,mark一下这个的配置步骤 1 下载eclipse 2 下载android sdk,配置sdk路径,添加环境变量 3 安装adt 4 下载android ndk,配 ...