这期内容当中小编将会给大家带来有关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对象了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。