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在某些类中取到值问题
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。