Springboot获取bean实例之SpringContextUtil详解
作者:stupid child
这篇文章主要介绍了Springboot获取bean实例之SpringContextUtil使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Springboot获取bean实例-SpringContextUtil
1、工具类 SpringContextUtil
package XXXXXXXX;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
*
* 获取spring容器,以访问容器中定义的其他bean
*/
@Component
public class SpringContextUtil implements ApplicationContextAware {
// Spring应用上下文环境
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
*
* @param applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 通过name获取对象
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
}2、要注入的bean
package XXXXX;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class ShardingVariableConfig {
@Value("${sharding.data.node}")
private int dataNode;
@Value("${sharding.table.node}")
private int tableNode;
//获取分库参数
public int getDataNode(){
return this.dataNode;
}
//获取分表参数
public int getTableNode(){
return this.tableNode;
}
}
3、yml配置

4、方法中调用
ShardingVariableConfig valueService = (ShardingVariableConfig) SpringContextUtil.getBean("shardingVariableConfig");//bean的名称
int dataNode = valueService.getDataNode();注意事项:
工具类SpringContextUtil和JavaBean都要加注解@Component,否则会Spring无法扫描到二者的位置
总结
通过此方法可以在任何地方调用JavaBean,解决@Autowired或@Resource无法注入的问题,无法直接通过@Value在某些类中取到值问题
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
