尽管springboot的官方文档很糟糕,但是关于Auto-configuration还是写得比较好的,位于springboot reference中的Creating Your Own Auto-configuration。
至于为什么要用 Auto-configuration,可以见我写得这一篇文章:@SpringBootApplication中几点解惑
springboot官方提供的一个样例,非常不错,看了以后,auto-configuration就学会了:Master Spring Boot auto-configuration
auto-configuration的代码分层架构
官方推荐分成2个工程,一个starter,另一个autoconfigure。
但是我个人认为就那么一个starter就好了,何必分成2个工程,感觉多此一举的,因为starter纯粹就是一个空工程。
不过,话反过来说,学会了2个分开的工程,合成一个工程也是超级简单的,所以无所谓一个工程还是2个工程。
命名常规
官方的auto-configuration,比如yyy来举例,那么应该是 spring-boot-starter-yyy.jar,spring-boot-autoconfigure-yyy.jar
非官方的auto-configuration,比如xxx来举例,那么应该是 xxx-spring-boot-starter.jar,xxx-spring-boot-autoconfigure.jar
上面已经描述很清晰了,不再解释了。
spring-factories
对于auto-configuration工程来说,已经取消了Component auto scan的功能,代而取之的是采用spring-factories的方式,这个spring-factories文件位于autoconfigure这个工程中。
spring-provides
这个文件在springboot的官方文档中是没有提到的,那这个spring-provides文件用来干什么的?我查了有个人这么解释的:
It's for tooling. STS (and other IDEs if they chose to) can index those files and make autocomplete suggestions based on stuff that isn't yet on the classpath.
哦,原来是给STS,或者IDEA用的,这个文件放置在starter这个工程中,那就不用去管这个文件了。
好了,springboot的 auto-configuration就这么简单。