一.启动类:
@SpringBootApplication(
scanBasePackages = {"com.sunny"}
)
public class MesApplication {
public static ConfigurableApplicationContext context;
public static void main(String[] args) {
MesApplication.context = SpringApplication.run(MesApplication.class, args);
}
}
二、添加SpringBeanUtils工具类
@Component
public class SpringBeanUtils<T> implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringBeanUtils.applicationContext = applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext != null?applicationContext.getBean(clazz):null;
}
public static Object getBeanByString(String beanName) throws BeansException {
return applicationContext.getBean(beanName);
}
}
三、静态方法获取Bean对象
public class ConsumerRoute {
public static MessageConsumer routeByPort(Integer port){
MessageConsumer consumer = null;
if(!StringUtils.isEmpty(messageType)){
调用主方法中的Context获取BeanFactory对象集
Map<String, MessageConsumer> consumerMap = MesApplication.context.getBeanFactory().getBeansOfType(MessageConsumer.class);
for(String packageName:consumerMap.keySet()){
if(packageName.contains(messageType)){
consumer = consumerMap.get(packageName);
break;
}
}
}
return consumer;
}
}
四、使用getBeanByString()方法,通过bean名获取Bean对象
public class handler extends LV_Base_handler {
/**
* kafkaTemplate注入
*/
KafkaTemplate kafkaTemplate = (KafkaTemplate) SpringBeanUtils.getBeanByString("kafkaTemplate");
RedisTemplate redisTemplate = (RedisTemplate) SpringBeanUtils.getBeanByString("redisTemplate");
}
五、使用getBean()方法,通过.class()获取Bean对象
@Override
public void reload() {
try {
当方法为静态时,注入ResourceConfig会为空,通过该方法获取
pcConfig= XMLUtils.fromFileXML(PortsCategoryConfig.class, SpringBeanUtils.getBean(ResourceConfig.class).getXml_file_name(), SpringBeanUtils.getBean(ResourceConfig.class).getCategory_config_filePath());
} catch (FileNotFoundException e) {
log.error("ports_category_config.xml没有找到,cause:"+e.getMessage());
}
}
六、留言:
欢迎留言更好的方法!