1、yml文件与properties文件优先级

yml优先级高
1.当文件路径相同时,文件中的配置信息都会生效,但是当文件中有配置信息冲突时,加载顺序是yml>yaml>properties
及优先级低的会覆盖优先级高的属性
**
2.文件路径不同时
零散知识点 - 图1

2.@Autowired 加在构造器上 注入Bean

有的时候写在变量上会报空指针异常NPE
https://blog.csdn.net/weixin_42213903/article/details/100513570
这种方式会报错:

  1. public class Test{
  2. @Autowired
  3. private A a;
  4. private final String prefix = a.getExcelPrefix();
  5. ........
  6. }

正确、不报错

  1. public class Test{
  2. private final String prefix;
  3. @Autowired
  4. public Test(A a) {
  5. this.prefix= a.getExcelPrefix();
  6. }
  7. ........
  8. }
  • @autowired写在变量上的注入要等到类完全加载完,才会将相应的bean注入,而变量是在加载类的时候按照相应顺序加载的,所以变量的加载要早于@autowired变量的加载,那么给变量prefix 赋值的时候所使用的a,其实还没有被注入,所以报空指针,而使用构造器就在加载类的时候将a加载了,这样在内部使用a给prefix 赋值就完全没有问题。
  • 不使用构造器,那么也可以不给prefix 赋值,而是在接下来的代码使用的地方,通过a.getExcelPrefix()进行赋值,这时的对a的使用是在类完全加载之后,即a被注入了,所以也是可以的。
  • @Autowired一定要等本类构造完成后,才能从外部引用设置进来。所以@Autowired的注入时间一定会晚于构造函数的执行时间。但在初始化变量的时候就使用了还没注入的bean,所以导致了NPE。如果在初始化其它变量时不使用这个要注入的bean,而是在以后的方法调用的时候去赋值,是可以使用这个bean的,因为那时类已初始化好,即已注入好了。