SpringBoot自動配置

本篇介紹下,如何經過springboot的自動配置,將公司項目內的依賴jar,不須要掃描路徑,依賴jar的狀況下,就能將jar內配置了@configuration註解的類,建立到IOC裏面html

  • 介紹下開發環境
    • JDK版本1.8
    • springboot版本是1.5.2
    • 開發工具爲 intellij idea(2018.2)
    • 開發環境爲 15款MacBook Pro

前言

不少時候,咱們在公司用springboot做爲基礎框架開發項目的時候,會碰見依賴jar的時候,別的jar裏面須要建立一些bean,每每不是很方便,咱們須要經過 @ComponentScan 註解來掃描,才能建立上,這時候,自動配置就派上用場了,官方文檔上有介紹(須要細細看才能找到),估計不少朋友還不知道,這邊寫個教程,給各位做參考java


如何弄自動配置呢?

此次,咱們只在同一個項目內配置,只作演示自動配置,若是是jar,依葫蘆畫瓢,而後上傳到maven私服,普通springboot項目依賴該jar便可git

  1. 咱們先建立一個普通的spring-boot項目,記得添加web依賴,不然,項目不會後臺運行web

    <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
  2. 建立一個測試自動配置的類(不跟啓動類一個目錄下,最好單首創建一個目錄)spring

    @Configuration(value = "testAutoConfiguration")
    public class TestAutoConfiguration {
    
      private static final Logger LOGGER = LoggerFactory.getLogger(TestAutoConfiguration.class);
    
      public TestAutoConfiguration() {
          LOGGER.warn("建立 TestAutoConfiguration 成功");
      }
    }
  3. 而後咱們在啓動類配置下,查看是否會打印建立 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);
    			}
    		 }
    	 }
    }
  4. 接下來,咱們啓動項目,查看日誌打印,會發現,並無打印建立 TestAutoConfiguration 跟打印Bean名稱的日誌,表示沒有 TestAutoConfiguration 並無註冊到IOC上,而後咱們增長自動配置框架


增長自動配置

使用自動配置,咱們須要配置的東西不多,也就新增下文件maven

自動配置官方文檔地址以下: 自動配置官方文檔ide

  1. 咱們須要在 resources 下建立一個目錄名叫 META-INF 接着在裏面建立一個叫 spring.factories 的文件,裏面內容以下:spring-boot

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    // 配置你須要自動配置的文件路徑,若是多個文件,用 ,\ 分割
    com.example.AutoConfiguration.TestAutoConfiguration
  2. 理論上咱們還須要在啓動類上面配置註解 @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 {
        ......
  3. 而後,咱們啓動項目,查看日誌,發現打印了應該打印的日誌,說明自動配置成功

    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自動配置

到這,文章就結束了!

以上,均爲本人測試而得出的結果,可能會有出入,或者錯誤,歡迎指正

歡迎轉載,請註明出處跟做者,謝謝!

相關文章
相關標籤/搜索