1、yml文件与properties文件优先级
yml优先级高
1.当文件路径相同时,文件中的配置信息都会生效,但是当文件中有配置信息冲突时,加载顺序是yml>yaml>properties
及优先级低的会覆盖优先级高的属性
**
2.文件路径不同时
2.@Autowired 加在构造器上 注入Bean
有的时候写在变量上会报空指针异常NPE
https://blog.csdn.net/weixin_42213903/article/details/100513570
这种方式会报错:
public class Test{
@Autowired
private A a;
private final String prefix = a.getExcelPrefix();
........
}
正确、不报错
public class Test{
private final String prefix;
@Autowired
public Test(A a) {
this.prefix= a.getExcelPrefix();
}
........
}
- @autowired写在变量上的注入要等到类完全加载完,才会将相应的bean注入,而变量是在加载类的时候按照相应顺序加载的,所以变量的加载要早于@autowired变量的加载,那么给变量prefix 赋值的时候所使用的a,其实还没有被注入,所以报空指针,而使用构造器就在加载类的时候将a加载了,这样在内部使用a给prefix 赋值就完全没有问题。
- 不使用构造器,那么也可以不给prefix 赋值,而是在接下来的代码使用的地方,通过a.getExcelPrefix()进行赋值,这时的对a的使用是在类完全加载之后,即a被注入了,所以也是可以的。
- @Autowired一定要等本类构造完成后,才能从外部引用设置进来。所以@Autowired的注入时间一定会晚于构造函数的执行时间。但在初始化变量的时候就使用了还没注入的bean,所以导致了NPE。如果在初始化其它变量时不使用这个要注入的bean,而是在以后的方法调用的时候去赋值,是可以使用这个bean的,因为那时类已初始化好,即已注入好了。