1. 程式人生 > >spring-boot的常見的註解使用

spring-boot的常見的註解使用

Spring Boot是Spring框架對“約定優於配置(Convention Over Configuration)”理念的最佳實踐產物。一個典型的Spring Boot應用本質上就是一個基於Spring框架的應用。Spring Boot使用註解的方式對Bean和配置進行收集,註冊,分析和組裝。簡化了基於XML配置檔案的開發。能夠快速地構建出一個應用程式。
--------------------- 
作者:xiaolongleee 
來源:CSDN 
原文:https://blog.csdn.net/mytobaby00/article/details/81141620 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

1、@ComponentScan的功能其實就是自動掃描並載入符合條件的元件或Bean定義,並最終將這些Bean定義載入到容器中。其作用是:

      *自動掃描路徑下邊帶有@Controller,@Service,@Repository,@Component註解加入Spring IoC容器。
      *通過includeFilters加入掃描路徑下沒有以上註解的類加入spring容器。
      *通過excludeFilters過濾出不用加入spring容器的類。
2、@Conditional:在Spring框架中,我們可使用@Conditional配合@Configuration或者@Bean等註解來干預一個配置或者Bean定義是否生效

,要實現基於條件的配置,我們只需要通過@Conditional指定自己的Condition實現類就可以了:

@Conditional({TheCondition1.class, TheCondition2.class, ...})

 3、在實現自動配置的過程中,除了基於條件配置,我們還需要提供配置或元件載入的順序,從而讓這些配置或者元件之間的依賴分析和組裝可以順利完成。

      *@AutoConfigureBefore讓當前配置或元件在某個元件之前執行。

      *@AutoConfigureAfter

讓當前配置或元件在某個元件之後執行。

4、在Spring Boot中,有些變數需要根據需要配置在application.properties中,那我們可以通過@Value註解讀取這些變數並注入。該註解可以注入:

       *普通字串:@Value("This is a normal string") private String normalString;
       *作業系統屬性:@Value("#{systemProperties['os.name']}") private String osName;
       *表示式結果:@Value("#{ T(java.lang.Math).random() * 20.0 }") private double theNum;
       *檔案資源:@Value("classpath:WEB-INF/spring.properties") private Resource resourceFile;
       *URL資源:@Value("http://www.baidu.com") private Resource baiduUrl;
       *其他Bean屬性:@Value("#{otherBean.thatProperty}") private String propertyFromOtherBean;
5、@PropertySource

         *@PropertySource用於讀取指定目錄下的檔案,並載入。如:

         *@PropertySource(value = {"classpath:system-config.properties"},encoding="utf-8")

6、@Autowired是Spring 3.0引入的一個註解,可以標註在類的屬性上,這樣Spring容器就會以byType的方式來注入對應的Bean。

       如果某個Type實現了多個Bean,則使用@Autowired時,需要根據@Qualifier註解來指定需要注入哪個實現類。也可以採用List或Map的方式將所有實現類一起注入。如果注入的是Map,則key為該Bean的id。
7、@Resource預設按照ByName自動注入,由J2EE提供,需要匯入包javax.annotation.Resource。

      @Resource有兩個重要的屬性:name和type,而Spring將@Resource註解的name屬性解析為Bean的名字,而type屬性則解析為Bean的型別。所以:

           *如果使用name屬性,則使用byName的自動注入策略.
           *而使用type屬性時則使用byType自動注入策略。
           *如果既不制定name也不制定type屬性,這時將通過反射機制使用byName自動注入策略。

8、@Component用於將類例項化並注入IoC中。其他註解@Controller@Service@Respository的用法跟@Component差不多,比@Component帶有更多的語義,他們分別對應了控制層業務層持久層的類。

9、@RequestMapping是一個用來處理請求地址對映的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。 該註解有六個屬性:

       *params:指定request中必須包含某些引數值是,才讓該方法處理。
       *headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。
       *value:指定請求的實際地址,指定的地址可以是URI Template 模式
       *method:指定請求的method型別, GET、POST、PUT、DELETE等
       *consumes:指定處理請求的提交內容型別(Content-Type),如application/json,text/html;
       *produces:指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回

10、@RequestParam該註解用在方法的引數前面。其作用就是獲取request.getParameter(方法引數)的值,並將取得的·值付給該引數。

11、@ResponseBody:使用@ResponseBody表示該方法的返回結果直接·寫入HTTP response body中

12、@RequestBody用於讀取Request請求的body部分資料,使用系統預設配置的HttpMessageConverter進行解析,然後把相應的資料繫結到要返回的物件上;再把HttpMessageConverter返回的物件資料繫結到 controller中方法的引數上。