本篇介紹下,如何經過springboot的自動配置,將公司項目內的依賴jar,不須要掃描路徑,依賴jar的狀況下,就能將jar內配置了@configuration註解的類,建立到IOC裏面html
不少時候,咱們在公司用springboot做爲基礎框架開發項目的時候,會碰見依賴jar的時候,別的jar裏面須要建立一些bean,每每不是很方便,咱們須要經過
@ComponentScan
註解來掃描,才能建立上,這時候,自動配置就派上用場了,官方文檔上有介紹(須要細細看才能找到),估計不少朋友還不知道,這邊寫個教程,給各位做參考java
此次,咱們只在同一個項目內配置,只作演示自動配置,若是是jar,依葫蘆畫瓢,而後上傳到maven私服,普通springboot項目依賴該jar便可git
咱們先建立一個普通的spring-boot項目,記得添加web依賴,不然,項目不會後臺運行web
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
建立一個測試自動配置的類(不跟啓動類一個目錄下,最好單首創建一個目錄)spring
@Configuration(value = "testAutoConfiguration") public class TestAutoConfiguration { private static final Logger LOGGER = LoggerFactory.getLogger(TestAutoConfiguration.class); public TestAutoConfiguration() { LOGGER.warn("建立 TestAutoConfiguration 成功"); } }
而後咱們在啓動類配置下,查看是否會打印建立 TestAutoConfiguration
Bean的日誌記錄springboot
@SpringBootApplication // 實現接口 CommandLineRunner 實現 run 方法,這樣,項目一啓動就會執行run方法內容 public class SpringbootAutoConfigurationApplication implements CommandLineRunner { private static final Logger LOGGER = LoggerFactory.getLogger(SpringbootAutoConfigurationApplication.class); @Autowired private ApplicationContext context; public static void main(String[] args) { SpringApplication.run(SpringbootAutoConfigurationApplication.class, args); } @Override public void run(String... strings) throws Exception { for (String name : context.getBeanDefinitionNames()) { // 若是存在Bean名稱爲 testAutoConfiguration 則打印Bean的名稱 if("testAutoConfiguration".equals(name)){ LOGGER.info(name); } } } }
接下來,咱們啓動項目,查看日誌打印,會發現,並無打印建立 TestAutoConfiguration
跟打印Bean名稱的日誌,表示沒有 TestAutoConfiguration
並無註冊到IOC上,而後咱們增長自動配置框架
使用自動配置,咱們須要配置的東西不多,也就新增下文件maven
自動配置官方文檔地址以下: 自動配置官方文檔ide
咱們須要在 resources
下建立一個目錄名叫 META-INF
接着在裏面建立一個叫 spring.factories
的文件,裏面內容以下:spring-boot
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ // 配置你須要自動配置的文件路徑,若是多個文件,用 ,\ 分割 com.example.AutoConfiguration.TestAutoConfiguration
理論上咱們還須要在啓動類上面配置註解 @EnableAutoConfiguration
可是註解 @SpringBootApplication
已經包含了該註解,因此咱們不須要配置該註解 @SpringBootApplication
註解源碼以下:
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration //已經包含了開啓自動配置註解 @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { ......
而後,咱們啓動項目,查看日誌,發現打印了應該打印的日誌,說明自動配置成功
2018-10-18 00:30:22.616 WARN 636 --- [ main] c.e.A.TestAutoConfiguration : 建立 TestAutoConfiguration 成功 2018-10-18 00:30:22.780 INFO 636 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2018-10-18 00:30:22.834 INFO 636 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2018-10-18 00:30:22.838 INFO 636 --- [ main] d.SpringbootAutoConfigurationApplication : testAutoConfiguration 2018-10-18 00:30:22.842 INFO 636 --- [ main] d.SpringbootAutoConfigurationApplication : Started SpringbootAutoConfigurationApplication in 1.93 seconds (JVM running for 2.42)
下篇介紹了springboot的條件配置,博客地址:spingboot條件配置
項目源碼,我已經上傳到gitee
須要的朋友,能夠本身點擊查看 springboot自動配置
到這,文章就結束了!
以上,均爲本人測試而得出的結果,可能會有出入,或者錯誤,歡迎指正
歡迎轉載,請註明出處跟做者,謝謝!