在写一个小Demo的时候,发现我的DateSoure注入为null,后来通过对源码分析,发现该配置Bean也就是我的MybatisConfig在实例化时,AutowirteAnnotationBeanPostProcessor居然还没有实例化,导致@Value失效,后续把目光关注到@Configuration实例化时机,发现一个关键点
MapperScannerConfigurer是一个BeanDefinitionRegistryPostProcessor,所以它会AutowirteAnnotationBeanPostProcessor之前实例化,而它实例化会导致我们配置类实例化(FactoryBean),由此导致配置类实例化时,AutowirteAnnotationBeanPostProcessor还没有实例化从而导致@Vaule失效,解决办法很简单,将MapperScannerConfigurer提出到其他配置类,或者把DataSource提出到其他类,当然也可以提前创建AutowirteAnnotationBeanPostProcessor,但是更改内部类创建时机不是好办法,可能导致某些Bug.