https://gooroo.io/GoorooTHINK/Article/17466/Lessons-Learned-Writing-Spring-Boot-Auto-Configurations/29652#.W_ZwdFUzYdV
https://blog.csdn.net/isea533/article/details/53975720
自己寫的starter中AutoConfig類所在包名不要和應用類的包名相同,
如果@ComponetScan掃描到autoConfig類,會立即初始化, 此時順序不能保證。 如果autoConfig依賴一些bean順序 比如@AutoConfigureAfter會失效,造成問題
AutoConfiguration的本意是為了: 用戶只引入了相關的jar, 但是沒有自定義這些bean, 此時autoConfig會自動創建bean
比如用戶引用了redis,但是沒有寫<bean id=“redisXXXXX”> redisAutoStarter會自動創建這些必須的類
autoConfig的啟動時機 應該是beanFactory靠后
不在同一個包下:
==>> spring.factories 中定義了autoConfig 會被加載
==>> spring.factories 沒有定義autoConfig, 不會被加載
如果其他@Configuration類@Import了這個autoConfig, 會被加載
其他@Configuration中@Autowire了spring.factories生成的@Bean, 導致提前初始化
同一包名下:
==>> 不管spring.factories中有沒有定義,掃描到后立即加載
排序算法 org.springframework.boot.autoconfigure.AutoConfigurationSorter#doSortByAfterAnnotation