好程式設計師分享SpringBoot須掌握的註解
前言
Spring 經歷瞭如下幾個階段 :
第一階段: xml 配置
在 Spring 1.x 時代,使用 Spring 開發滿眼都是 xml 配置的 Bean ,隨著專案的擴大,我們需要把 xml 配置檔案放到不同的配置檔案裡,那時需要頻繁的在開發的類和配置檔案之間進行切換
第二階段:註解配置
在 Spring 2.x 時代,隨著 JDK1.5 帶來的註解支援, Spring 提供了宣告 Bean 的註解(例如 @Component 、 @Service ),大大減少了配置量。主要使用的方式是應用的基本配置(如資料庫配置)用 xml ,業務配置用註解
第三階段: java 配置
Spring 3.0 引入了基於 Java 的配置能力,這是一種型別安全的可重構配置方式,可以代替 XML 。我們目前剛好處於這個時代, Spring4.x 和 Spring Boot 都推薦使用 Java 配置。
所有這些 xml 配置都代表了開發時的損耗。 因為在思考 Spring 特性配置和解決業務問題之間需要進行思維切換,所以寫配置擠佔了寫應用程式邏輯的時間 。 Spring Boot 讓這一切成為了過去。 Spring Boot 簡化了基於 Spring 的應用開發,只需要 “run” 就能建立一個獨立的、生產級別的 Spring 應用。 Spring Boot 為 Spring 平臺及第三方庫提供開箱即用的設定(提供預設設定),這樣我們就可以簡單的開始。多數 Spring Boot 應用只需要很少的 Spring 配置。我們可以使用 SpringBoot 建立 java 應用,並使用 java –jar 啟動它,或者採用傳統的 war 部署方式。這也是 SpringBoot 讓 越來越多的開發人員使用的主要原因之一。下面我們就來詳細講解 Spring Boot 幾個很重要的註解: @Configuration , @Bean , @SpringBootApplication , @ComponentScan
@ Configuration 和 @Bean 註解
Spring 的 Java 配置方式是透過 @Configuration 和 @Bean 這兩個註解實現的,這兩個註解是從 Spring3.0 之後就開始有了:
1 、 @Configuration 作用於類上,相當於一個 xml 配置檔案;
2 、 @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
@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 註解預設掃描的是當前類所在的包和子包。自己可以透過屬性來設定掃描其他的包,設定了之後預設值就不在有用。
@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
@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")
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2646751/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java程式設計師必須掌握的5個註解!Java程式設計師
- 好程式設計師教程分享Java註解和運用註解程式設計程式設計師Java
- 好程式設計師Java分享SpringMVC之@ResponseBody註解程式設計師JavaSpringMVC
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享初學入門須掌握4大核心基礎!程式設計師Java
- 程式設計師筆記——springboot 之常用註解程式設計師筆記Spring Boot
- 好程式設計師Java培訓分享註解與反射原理說明程式設計師Java反射
- 好程式設計師Java培訓分享SpringBoot -啟動流程程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享SpringBoot入門篇程式設計師JavaSpring Boot
- 好程式設計師分享placeholder屬性詳解程式設計師
- 程式設計師必須掌握的資料結構 2程式設計師資料結構
- 程式設計師必須掌握的資料結構 1程式設計師資料結構
- 好程式設計師Java培訓分享SpringBoot -自動配置原理程式設計師JavaSpring Boot
- 前端工程師必須掌握的設計模式前端工程師設計模式
- Java程式設計師必須掌握的Spring依賴管理原理Java程式設計師Spring
- 程式設計師必須掌握的核心演算法有哪些?程式設計師演算法
- 程式設計師生存指南:你必須要掌握的兩點!程式設計師
- 好程式設計師分享ApacheSpark常見的三大誤解程式設計師ApacheSpark
- 好程式設計師Java分享零基礎學Java要掌握哪些技能?程式設計師Java
- 【Linux常用命令①】程式設計師必須掌握的Linux命令Linux程式設計師
- Java程式設計師必須掌握的7個Java效能指標!Java程式設計師指標
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 每個程式設計師必須掌握的常用英語詞彙分享給你(建議收藏)程式設計師
- 好程式設計師分享JavaScript建立物件的方式!程式設計師JavaScript物件
- VUE的面試題分享-好程式設計師Vue面試題程式設計師
- 好程式設計師分享WebService的簡單使用程式設計師Web
- 列舉幾個Java程式設計師通用的、必須掌握的框架Java程式設計師框架
- Java必須掌握的Spring常用註解JavaSpring
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓Java最常用的五個註解程式設計師Java
- 為什麼說 Java 程式設計師必須掌握 Spring Boot ?Java程式設計師Spring Boot
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Python培訓分享Python程式設計師面試技巧程式設計師Python面試
- 好程式設計師Java教程分享List介面程式設計師Java
- 好程式設計師Java教程分享javaweb框架程式設計師JavaWeb框架
- 好程式設計師分享JavaScript六種繼承方式詳解程式設計師JavaScript繼承
- 好程式設計師分享Css詳解bem書寫規範程式設計師CSS