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在某些类中取到值问题
版权声明:本文为weixin_44643439原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。