1. 程式人生 > >spring 、spring boot 常用註解

spring 、spring boot 常用註解

xml配置 意思 無法 產生 webp con delattr bin ddr

@Profile
    1.用戶配置文件註解.
    2.使用範圍: @Configration 和 @Component 註解的類及其方法,
             其中包括繼承了 @Component 的註解: @Service、 @Controller、 @Repository 等… 
    3.屬性:value字串必傳,
        可接受一個或者多個參數.
    4.作用:該註解相當於配置文件 application.properties 中的 spring.profiles.active ,去匹配對應環境的配置文件 application-{profile}.properties。
    5.eg:    @Profile({"dev","test"})
        @Profile(value="prod")

@ComponentScan
    1.組件掃描註解,經常與 @Configuration 註解配合使用。
    2.使用範圍:類.
    3.屬性:選
        basePackages --  指定包路徑進行掃描;
        basePackageClasses -- 指定接口或者類所在的包進行組件掃描;
        excludeFilters -- 指定不適合組件掃描的類型;                    
            FilterType.ANNOTATION:按照註解過濾
            FilterType.ASSIGNABLE_TYPE:按照給定的類型
            FilterType.ASPECTJ:使用ASPECTJ表達式
            FilterType.REGEX:正則
            FilterType.CUSTOM:自定義規則
        includeFilters -- 指定哪些類型有資格用於組件掃描;
        lazyInit -- 指定是否應註冊掃描的beans為lazy初始化;
        nameGenerator -- 用於在Spring容器中的檢測到的組件命名;
        resourcePattern -- 控制可用於組件檢測的類文件;
        scopedProxy -- 指出代理是否應該對檢測元件產生,在使用過程中會在代理風格時尚的範圍是必要的;
        scopeResolver -- 用於解決檢測到的組件的範圍;
        useDefaultFilters -- 指示是否自動檢測類的註釋 @Component、 @Repository, @Service, or @Controller應啟用;
        value -- basePackages()別名。
    4.作用:定義掃描的路徑從中找出標識了需要裝配的類自動裝配到spring的bean容器中。
        即自動裝配標識了 @Component註解的類,包括繼承了 @Component 的註解
    5.eg: @ComponentScan({"com.in28minutes.springboot.basics.springbootin10steps","com.in28minutes.springboot.somethingelse"})
          @ComponentScan(basePackages="packName1, packName2")
          @ComponentScan(basePackageClasses={CDPlayer.class, DVDPlayer.class})
          @ComponentScan(basePackages={"spitter"},excludeFilters={ @Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})
          @ComponentScan(value = "com.xhx.spring",useDefaultFilters = false,includeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})}

@Configuration
    1.配置信息註解,經常與 @Bean 註解配合使用。
    2.使用範圍:配置類不能是 final 的;
            配置類不能是本地化的,亦即不能將配置類定義在其他類的方法內部;
            配置類必須有一個無參構造函數。
    3.屬性:無
    4.作用:聲明當前類是一個配置類,相當於一個Spring的XML配置文件。

@Component
    1.組件註解
    2.使用範圍:類
    3.屬性:value值可選
    4.作用:泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。   

@Controller
    1.控制器註解,通常需要配合註解 @RequestMapping
    2.使用範圍:控制器類
    3.屬性:value值可選
    4.作用:用於標註控制層組件(如struts中的action) 
        在spring 項目中由控制器負責將用戶發來的URL請求轉發到對應的服務接口(service層),一般這個註解在類中

@Service
    1.服務層註解
    2.使用範圍:服務層類
    3.屬性:value值可選
    4.作用:用於標註業務層組件 

@Repository
    1.持久層註解
    2.使用範圍:持久層類
    3.屬性:value值可選
    4.作用:用於標註數據訪問組件,即DAO組件. 

@Autowired
    1.自動註入註解(byType方式)
    2.使用範圍:被標註為組件的類中的成員變量、setter()方法和構造函數上。
    3.屬性:required值可選,當加上(required=false)時,就算找不到bean也不報錯。
    4.作用:自動導入依賴的bean對象;byType方式。
        把配置好的Bean拿來用,完成屬性、方法的組裝;
        它可以對類成員變量、方法及構造函數進行標註,完成自動裝配的工作;    

@Qualifier
    1.標示註解。
    2.使用範圍:成員變量、方法入參、構造函數入參。
            通常需要配合註解 @Autowired使用,使其按照名稱(byName)來裝配
    3.屬性:value值可選
    4.作用:當有多個同一類型的Bean時,可以用 @Qualifier(“name”)來指定。
        @Qualifier限定描述符除了能根據名字進行註入,但能進行更細粒度的控制如何選擇候選者
    5.eg: @Qualifier("userService")

@RequestBody
    1.請求體註解
    2.使用範圍:用在方法中的實體對象前。
    3.屬性:required值可選。
    4.作用:可以接收json格式的數據,並將其轉換成對應的數據類型賦值給對象。
        一般情況下來說常用其來處理application/json類型

@ResponseBody
    1.響應體註解,一般配合 @RequestMapping使用
    2.使用範圍:用在方法前。
    3.屬性:無。
    4.作用:表示該方法的返回結果直接寫入HTTP response body中,一般在異步獲取數據時使用,用於構建RESTful的api。
        在使用 @RequestMapping後,返回值通常解析為跳轉路徑,加上 @responsebody後返回結果不會被解析為跳轉路徑,而是直接寫入HTTP response body中。
        比如異步獲取json數據,加上 @responsebody後,會直接返回json數據。    

@RequestMapping
    1.請求映射路徑註解(spring mvc 註解)
    2.使用範圍:控制器類及其方法;
            用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
    3.屬性:params:指定request中必須包含某些參數值時,才讓該方法處理。
        headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。
        value:指定請求的實際地址,指定的地址可以是URI Template 模式
        method:指定請求的method類型, GET、POST、PUT、DELETE等
        consumes:指定處理請求的提交內容類型(Content-Type),如application/json,text/html;
        produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回
    4.作用:提供路由信息,負責URL到Controller中的具體函數的映射
        @RequestMapping(“/path”)表示該控制器處理所有“/path”的URL請求。
    5.eg: @RequestMapping(value="/activity",produces="application/json;charset=UTF-8")、
           @RequestMapping(value="/getActivityList",method=RequestMethod.GET)
           @RequestMapping(value="/getAddressList",method=RequestMethod.POST,consumes="application/x-www-form-urlencoded;charset=UTF-8")

@RequestParam 
    1.請求參數註解(spring mvc 註解)
    2.使用範圍:用在方法中的參數前面。
    3.屬性:value值可選,
        required值可選。
    4.作用:用於將指定的請求參數賦值給方法中的形參
    5.eg: @RequestParam(value="name",required=false)

@PathVariable
    1.路徑變量註解(spring mvc 註解)
    2.使用範圍:方法中的參數前。
    3.屬性:value值必須,
        required值可選。
        name值可選.
    4.作用:用來獲得請求url中的動態參數的,參數與大括號裏的名字一樣要相同。
    5.eg: @RequestMapping("/zyh/{type}")  -->  (@PathVariable(value="type") int type)

@ModelAttribute(不是特別理解)
    1.模型屬性註解
    2.使用範圍:方法前、方法中的參數前。
    3.屬性:binding --
        value --
        name -- 
    4.作用:註解類型將參數綁定到Model對象

@Import 
    1.導入註解.
    2.使用範圍:類
    3.屬性:value類必傳,
        可接受一個或者多個參數.
    4.作用:引入帶有 @Configuration的java類。
    5.eg: @Import({BookStoreServiceConfig.class,BookStoreDaoConfig.class})  

@ImportResource
    1.導入資源文件.xml註解.
    2.使用範圍:類
    3.屬性:可選
        value --
        locations --
        reader --
    4.作用:引入spring配置文件.xml
    5.eg: @ImportResource(“classpath:/bookstore/config/spring-beans.xml”)  

@PropertySource
    1.導入資源文件.properties註解
    2.使用範圍:類
    3.屬性:value可選
    4.作用:獲取指定文件名的properties配置文件,未指定時默認加載application.properties
    5.eg: @PropertySource(value={"classpath:/user.properties"})
          @PropertySource("classpath:user.properties")

@Value
    1.取值註解
    2.使用範圍:屬性
    3.屬性:必選
    4.作用:配合 @ImportResource進行取值
    4.eg: @Value("${jdbc.username}")
          @Value("#{exampleClass.username}")

@Bean 
    1.Spring Bean 方法註解
    2.使用範圍:主要用在 @Configuration註解的類中的方法裏,
            也可以用在 @Component註解的類裏。
    3.屬性:可選
        name -- 指定一個或者多個 Bean 的名字。這等價於 XML 配置中 的 name 屬性。
        initMethod -- 容器在初始化完 Bean 之後,會調用該屬性指定的方法。這等價於 XML 配置中 的 init-method 屬性。
        destroyMethod -- 該屬性與 initMethod 功能相似,在容器銷毀 Bean 之前,會調用該屬性指定的方法。這等價於 XML 配置中 的 destroy-method 屬性。
        autowire -- 指定 Bean 屬性的自動裝配策略,取值是 Autowire 類型的三個靜態屬性。
            Autowire.BY_NAME,Autowire.BY_TYPE,Autowire.NO。
            與 XML 配置中的 autowire 屬性的取值相比,這裏少了 constructor,
            這是因為 constructor 在這裏已經沒有意義了。
            @Bean 沒有直接提供指定作用域的屬性,可以通過 @Scope 來實現該功能。
    4.作用:用於返回某個實例的方法上,等價於Spring的xml配置文件中的
<bean>。 @Configuration VS @Component 共同點:都可以用於創建Bean; 不同點:實現原理不同, @Configuration基於CGlib代理實現, @Component基於反射實現; 使用場景: @Configuration用於全局配置,比如數據庫相關配置,MVC相關配置等; 業務Bean的配置使用註解配置(@Component,@Service,@Repository,@Controller)。 @ControllerAdvice 使用範圍:進行異常處理的控制器類。 作用:包含 @Component。可以被掃描到。統一處理異常。 @ExceptionHandler 使用範圍: @ControllerAdvice類中的方法上 作用:用在方法上面表示遇到這個異常就執行以下方法。 eg: @ExceptionHandler(Exception.class) @Aspect 切面註解 @Pointcut 切入點註解 使用範圍:切面類中的方法前 eg: @Pointcut(url) //定義切入點,攔截servie包其子包下的所有類的所有方法 @Pointcut("execution(* com.hs.qmct.app.web.service..*.*(..))") //攔截指定的方法,這裏指只攔截KnowledgeRecordController.getKnowledgeDetail這個方法 @Pointcut("execution(* com.hs.qmct.app.web.service.knowledge.impl.KnowledgeRecordServiceImpl.getKnowledgeDetail(..))") @Before 切入前攔截註解 使用範圍:切面類中的執行方法前的攔截方法前 eg: @Before("excuteService()") @AfterReturning 後置返回通知註解 這裏需要註意的是: 如果參數中的第一個參數為JoinPoint,則第二個參數為返回值的信息 如果參數中的第一個參數不為JoinPoint,則第一個參數為returning中對應的參數 returning 限定了只有目標方法返回值與通知方法相應參數類型時才能執行後置返回通知,否則不執行, 對於returning對應的通知方法參數為Object類型將匹配任何目標返回值 eg: @AfterReturning(value = Ponit_S_K_K_getKnowledgeDetail, returning = "keys") @WebFilter 過濾器註解 eg: @WebFilter(filterName = "webParamRequestFilter", urlPatterns = "/*", asyncSupported = true) @Inject 註意: @Inject並不是Spring的註解,它是JSR330 (Dependency Injection for Java)中的規範,它的包是javax.inject.Inject,需要導入。 使用範圍:可以作用在變量、setter方法、構造函數上。 作用:等價於默認的 @Autowired,只是沒有required屬性; 是根據類型進行自動裝配的,如果需要按名稱進行裝配,則需要配合 @Named; @Named 註意: @Named並不是Spring的註解,它的包是javax.inject.Named 和spring中的 @Component相同。 配合 @Inject使用時,自動註入的策略就從 byType 轉變成 byName 了。 @Resource 註意:其實 @Resource並不是Spring的註解,它是JSR250規範的實現,它的包是javax.annotation.Resource,需要導入。 使用範圍:寫在字段和setter方法上。 屬性:name -- name屬性解析為bean的名字; type -- type屬性則解析為bean的類型; 作用:默認byName。與 @Autowired幹類似的事; 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常; 如果使用name屬性,則使用byName的自動註入策略,從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常; 如果使用type屬性,則使用byType自動註入策略,從上下文中找到類型匹配的唯一bean進行裝配,找不到或是找到多個,都會拋出異常; 如果既沒有指定name又沒有指定type,則通過反射機制自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型進行匹配,如果匹配則自動裝配。 eg: @Resource(name="name",type="type")
@SpringBootApplication
    1.入口類Application的啟動註解
    2.其中包含 @Configuration#java配置 @ComponentScan#組件掃描 @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中使用的標簽,用來掃描包配置的平行支持)。 @EnableAutoConfiguration 1.自動裝配註解 2.原理:借助AutoConfigurationImportSelector,幫助SpringBoot應用將所有符合條件的 @Configuration配置都加載到當前SpringBoot創建並使用的IoC容器。 借助於Spring框架原有的一個工具類:SpringFactoriesLoader.loadFactoryNames() 的支持, @EnableAutoConfiguration可以智能的自動配置功效才得以大功告成! @ConfigurationProperties 1.配置屬性註解 2.使用範圍: @Component的類或 @Bean的方法上; 需要打開 @EnableAutoConfiguration 3.屬性: locations -- ignoreUnknownFields -- 是否忽略在有屬性不能匹配到聲明的域的時候拋出異常 prefix -- 屬性前綴 4.作用:把配置文件application.properites中的配置項自動封裝成實體類,配置屬性由setter方法進行註入; 作用與 @Value直接註入到屬性等同 5.eg: @ConfigurationProperties(prefix="connection") @ConfigurationProperties(locations = "classpath:mail.properties", ignoreUnknownFields = false, prefix = "mail") @EnableConfigurationProperties 1.自動註入配置屬性註解 2.使用範圍:需要註入有 @ConfigurationProperties註解的類的類 3.屬性:value可選 4.作用:明確指定需要用哪個實體類來裝載配置信息, 使使用 @ConfigurationProperties 註解的類生效, 即使用了該註解後,使用 @ConfigurationProperties註解的類無需註冊為組件 5.eg: @EnableConfigurationProperties(ConnectionSettings.class) @EnableConfigurationProperties(MailProperties.class) @RestController 相當於 @ResponseBody + @Controller合在一起,表示這是個控制器bean,並且是將函數的返回值直 接填入HTTP響應體中,是REST風格的控制器 @JsonBackReference @JsonManagedReference @JsonIgnore 作用:均是為了解決對象中存在雙向引用導致的無限遞歸(infinite recursion)問題,即解決嵌套外鏈問題。 均可用在屬性或對應的get、set方法中。 說明: @JsonBackReference和 @JsonManagedReference:這兩個標註通常配對使用,通常用在父子關系中。 @JsonBackReference標註的屬性在序列化(serialization,即將對象轉換為json數據)時,會被忽略(即結果中的json數據不包含該屬性的內容)。 @JsonManagedReference標註的屬性則會被序列化。 在序列化時, @JsonBackReference的作用相當於 @JsonIgnore,此時可以沒有 @JsonManagedReference。 但在反序列化(deserialization,即json數據轉換為對象)時,如果沒有 @JsonManagedReference,則不會自動註入 @JsonBackReference標註的屬性(被忽略的父或子); 如果有 @JsonManagedReference,則會自動註入自動註入 @JsonBackReference標註的屬性。 @JsonIgnore:直接忽略某個屬性,以斷開無限遞歸,序列化或反序列化均忽略。 當然如果標註在get、set方法中,則可以分開控制,序列化對應的是get方法,反序列化對應的是set方法。 在父子關系中,當反序列化時, @JsonIgnore不會自動註入被忽略的屬性值(父或子),這是它跟 @JsonBackReference和 @JsonManagedReference最大的區別。 @RepositoryRestResource 配合spring-boot-starter-data-rest使用。 Spring Data REST本身是一個Spring MVC的應用,從引入的Jar可以看到其依賴於Spring和Spring MVC,還可以猜測出Spring Data REST提供的REST服務默認返回的JSON格式,並且默認是用的jackSon解析, Spring Data Jpa的默認配置為數據持久層, Spring Data Jpa的默認實現為Hibernate. eg: @RepositoryRestResource(collectionResourceRel = "people", path = "people") @Projection 投影註解 JPA提供了一種聲明方式來解決查詢結果,返回的對象無法直接轉換成Customer對象。 即聲明一個接口類,然後直接使用這個接口類接受返回的數據即可,可用來自定義返回字段。 eg: @Projection(name="user",types=UserBean.class) @RestResource(exported=false) 自定義方法註解 在倉庫接口中寫方法並加此註解; eg: @RestResource(exported=false),屏蔽 @RestResource(path="nameAndAge",rel="nameAndAge")

spring 、spring boot 常用註解