Java 如何从spring容器中获取注入的bean对象
1.使用场景
控制层调用业务层时,控制层需要拿到业务层在spring容器中注入的对象
2.代码实现
importorg.apache.struts2.ServletActionContext; importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importorg.springframework.context.ApplicationContext; importorg.springframework.context.support.ClassPathXmlApplicationContext; importorg.springframework.web.context.WebApplicationContext; importorg.springframework.web.context.support.WebApplicationContextUtils;
/**
*从spring容器中获取注入的bean对象
*@explain必须获取到ServletContext对象,Controller层以struts2为例
*@authorMarydon
*@creationTime2018年6月1日上午10:06:49
*@version1.0
*@since
*@emailmarydon20170307@163.com
*/
publicfinalclassBeansUtils{
privatestaticfinalLoggerlogger=LoggerFactory.getLogger(BeansUtils.class);
privatestaticApplicationContextctx;
privatestaticWebApplicationContextwebCtx;
//静态代码块:加载该类时会被运行的代码
static{
if(ctx==null){
try{
//入参需要拿到ServletContext对象
webCtx=WebApplicationContextUtils
.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
logger.info("从web.xml容器中加载spring-config.xml");
}catch(Exceptione){
logger.info("直接加载spring-config.xml");
}
if(webCtx==null)
//你可以自定义spring配置文件的文件名
ctx=newClassPathXmlApplicationContext("spring-config.xml");
}
}
/**
*通过beanID获取bean实例
*
*@parambeanID
*bean的代码
*@return返回对应的实例
*@throwsRuntimeException
*bean没有定义
*/
publicstaticObjectgetBeanInstance(StringbeanID)throwsRuntimeException{
logger.info("在spring容器中获取Bean对象ID="+beanID);
Objectobj;
if(BeansUtils.ctx==null){
if(BeansUtils.webCtx.containsBeanDefinition(beanID)){
obj=BeansUtils.webCtx.getBean(beanID);
}else{
logger.info("beanID="+beanID+"没有定义");
thrownewRuntimeException(beanID+"没有定义!");
}
}else{
if(BeansUtils.ctx.containsBeanDefinition(beanID)){
obj=BeansUtils.ctx.getBean(beanID);
}else{
logger.info("beanID="+beanID+"没有定义");
thrownewRuntimeException(beanID+"没有定义!");
}
}
returnobj;
}
}
以上就是Java如何从spring容器中获取注入的bean对象的详细内容,更多关于Java获取bean对象的资料请关注毛票票其它相关文章!