通过注解的方式引入 spring boot Java bean
今天看同事写了个 @EnableCommons 的注解,点击进去看了下,他这个方法类,主要是为了获取 Java bean ,在这个注解上加了个 @Import({XX.class})
自己写了demo 去验证了下 这个,其实为了引入这个java bean 没有必要这么写,而且@EnableXX,这种写法的原本含义不是为了引入额外的Java bean ,这样写也可以引入,但是用法不对,也写复杂了。
代码编写:
@EnableCommons的路径是com.xg.utils
启动类所在的路路:com.xg.producer
解决方案:
在启动类上加上 @ComponentScan("com.xg") ,即可加载到相应的Java config类
/**
* Spring ApplicationContext 工具类
*/
@Component
public class SpringApplicationContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
}
public static <T> T getBean(String beanName) {
if(applicationContext.containsBean(beanName)){
return (T) applicationContext.getBean(beanName);
}else{
return null;
}
}
public static <T> Map<String, T> getBeansOfType(Class<T> baseType){
return applicationContext.getBeansOfType(baseType);
}
}
测试类:
@SpringBootApplication
@EnableScheduling
@ComponentScan("com.xg")
public class TestApplication(){
SpringApplication.run(TestApplication.class.args);
Object commonsConfiguration = SpringUtils.getBeanOfType(CommonsConfiguration.class);
// 获取到想要加载的类信息
System.out.println(commonsConfiguration );
}