我们自定义一个工具类,从spring上下文,根据class找到指定的Bean类。
注意几个细节:
1,非静态类对静态对象的初始化赋值的正确写法
sonar提示:错误写法
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
System.out.println("applicationContext正在初始化,application:"+context);
SpringUtil.context = applicationContext;
}
...
}
错误提示:Make the enclosing method “static“ or remove this set
正确写法如下:
public class SpringUtil implements ApplicationContextAware {
@Setter
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
System.out.println("applicationContext正在初始化,application:"+context);
synchronized (SpringUtil.class) {
if (context == null) {
setContext(applicationContext);
}
}
}
...
}
2,spring默认会执行启动类同级和子包的组件,service等。
springboot分模块时,一个组件会分散在很多个模块,包下面。
一般遵守这个约定,所有的类都在启动的子包下面。
否则,启动后,这个非子包的组件不会被加载
如果一定要写在不同的包下面,需要使用注解指定包路径
@CommontScan