Spring經歷了以下幾個階段:java
第一階段:xml配置web
在Spring 1.x時代,使用Spring開發滿眼都是xml配置的Bean,隨着項目的擴大,咱們須要把xml配置文件放到不一樣的配置文件裏,那時須要頻繁的在開發的類和配置文件之間進行切換spring
第二階段:註解配置數據庫
在Spring 2.x 時代,隨着JDK1.5帶來的註解支持,Spring提供了聲明Bean的註解(例如@Component、@Service),大大減小了配置量。主要使用的方式是應用的基本配置(如數據庫配置)用xml,業務配置用註解tomcat
第三階段:java配置安全
Spring 3.0 引入了基於 Java 的配置能力,這是一種類型安全的可重構配置方式,能夠代替 XML。咱們目前恰好處於這個時代,Spring4.x和Spring Boot都推薦使用Java配置。springboot
全部這些xml配置都表明了開發時的損耗。 由於在思考 Spring 特性配置和解決業務問題之間須要進行思惟切換,因此寫配置擠佔了寫應用程序邏輯的時間。Spring Boot 讓這一切成爲了過去。Spring Boot 簡化了基於Spring的應用開發,只須要「run」就能建立一個獨立的、生產級別的Spring應用。Spring Boot爲Spring平臺及第三方庫提供開箱即用的設置(提供默認設置),這樣咱們就能夠簡單的開始。多數Spring Boot應用只須要不多的Spring配置。咱們可使用SpringBoot建立java應用,並使用java –jar 啓動它,或者採用傳統的war部署方式。這也是SpringBoot讓愈來愈多的開發人員使用的主要緣由之一。下面咱們就來詳細講解SpringBoot幾個很重要的註解:@Configuration , @Bean,@SpringBootApplication,@ComponentScanmvc
Spring的Java配置方式是經過 @Configuration和 @Bean 這兩個註解實現的,這兩個註解是從Spring3.0以後就開始有了:spring-boot
一、@Configuration 做用於類上,至關於一個xml配置文件;測試
二、@Bean 做用於方法上,至關於xml配置中的<bean>;
案例
@Configuration public class DemoConfigure { @Bean public User userBean(){ User user=new User(); user.setAge(100); user.setName("jack"); user.setPwd("123"); return user; } }
|
測試以下:
package com.example.springboot01;
|
打印:
User{name='jack', pwd='123', age=100}
@SpringBootApplication註解源碼以下:
package org.springframework.boot.autoconfigure; @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 {
}
|
@SpringBootApplication是一個複合註解,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration。
- @SpringBootConfiguration繼承自@Configuration,兩者功能也一致,標註當前類是配置類,並會將當前類內聲明的一個或多個以@Bean註解標記的方法的實例歸入到srping容器中,而且實例名就是方法名。
- @EnableAutoConfiguration的做用啓動自動的配置,@EnableAutoConfiguration註解的意思就是Springboot根據你添加的jar包來配置你項目的默認配置,好比根據spring-boot-starter-web ,來判斷你的項目是否須要添加了webmvc和tomcat,就會自動的幫你配置web項目中所須要的默認配置。
- @ComponentScan,掃描當前包及其子包下被@Component,@Controller,@Service,@Repository註解標記的類並歸入到spring容器中進行管理。是之前的<context:component-scan>(之前使用在xml中使用的標籤,用來掃描包)。
@SpringBootApplication註解默認掃描的是當前類所在的包和子包。本身能夠經過屬性來設置掃描其餘的包,設置了以後默認值就不在有用。
@SpringBootApplication(scanBasePackageClasses = {TestConfig.class,TestController.class})
經過設置scanBasePackageClasses屬性來制定,只掃描哪些配置類(@Configuration註解的類)。
或者以下設置:
@SpringBootApplication(scanBasePackageClasses = {Springboot01Application.class,TestConfig.class})
指定掃描這些類所在的包和子包。
springboot 的自動配置能夠幫咱們節省不少時間,可是有時候若是咱們不想在引入依賴包的狀況自動配置,則能夠經過相關設置取消
在@SpringBootApplication(exclude = {JpaRepositoriesAutoConfiguration.class, RedisAutoConfiguration.class})註解內部將不須要自動配置的依賴經過exclude參數指定便可,能夠指定多個類
全部自動配置的類全都在:org.springframework.boot.autoconfigure包下。只能排出自動配置的類。
@ComponentScan註解在Spring的註解中也起到到至關重要的做用,它能夠自定義Spring掃描的包,也就是它默認會掃描標註了@Controller、@Service、@Component以及@Repository註解的類,並實例化這些組件到SpringIOC容器中,它有個配置屬性:basePackages,也就是指定掃描的包,若是不知道,它會默認掃描配置了該註解的類的包所在的路徑(包括子包)。咱們看@SpringBootConfiguration註解的源碼中有段代碼:
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackages"
)
String[] scanBasePackages() default {};
scanBasePackages屬性,指定到了@ComponentScan註解的basePackages屬性,全部在SpringBoot中,咱們一樣能夠經過scanBasePackages屬性指定包掃描的路徑(如不指定,會默認掃描主程序類所在的包路徑以及子包下的類):
@SpringBootApplication(scanBasePackages = "com.seagetech.springbootdemo")