(1)jdk自帶的註解(5個):經常使用的就一個:@Override
(2)元註解(5個):經常使用的兩個:@Target(指定註解使用的位置) @Retention(描述生命週期)
(3)自定義註解:(框架裏都是)web
@Target 指定其餘註解可使用的位置(包上、類上、方法上、屬性上) @Retention 指定其餘註解的生命週期(源文件中、運行時、class文件中)
自定義註解須要配合元註解使用(經常使用@Target&@Retention )
(1)其餘註解使用在單個位置(如何指定?) @Target(ElementType.Type) (2)其餘註解使用在多個位置(如何指定?)底層維護的是一個數組 @Target({ElementType.Type,ElementType.Field}) (3)@Target註解的取值{值被維護在ElementType中} ElementType.Type ElementType.Field ElementType.Method
@Retention註解的取值{值被維護在RetentionPolicy工具類中} RetentionPolicy.SOURCE RetentionPolicy.CLASS RetentionPolicy.RUNTIME
(1)定義: @inteface 註解名{} (2)配合元註解,指定自定義註解使用的位置,以及自定義註解的生命週期
定義(1):ajax
@inteface Annotation{ String name(); //String name() default "lisi";//給name賦默認值lisi }
使用(1):spring
@Annotation(name="zhangsan") public void sayhello(){ }
定義(2):sql
@inteface Test{ int value(); //int value() default 10;//給value賦默認值10 }
使用(2):json
@Test(value=100) public void sayhello(){ }
因爲value的特殊性,在使用註解時,能夠省略「value=」,例如@Test(100)
若是想直接使用@Test不寫值100,能夠在定義註解時,設置value的默認值爲100
@inteface Test{ int value() default 100;//給value賦默認值100 }
問題分析:後端
@inteface Test{ String name() default "lisi";//給name賦默認值lisi int value() default 100;//給value賦默認值100 }
(1)能夠直接使用這個註解,直接寫@Test
(2)保留name的默認值,改value的值(「value=」可省略)數組@Test(10)(3)保留value的默認值,改name的值(「value=」可省略)springboot
@Test(name=」張三「)(4)同時改兩個值時(「value=」不能省略)restful
@Test(name=」張三「,value=10)
描述SpringBoot工程啓動類的特定註解
描述SpringBoot工程測試類的特定註解
自動裝配-由Spring框架爲咱們指定的屬性類型注入值.咱們經常使用接口類型的變量來接收spring框架注入的值(多態的思想,爲了下降耦合,讓程序更容易維護)
具體的注入(DI)過程:
@AutoWired Student student; 屬性的類型 屬性名
(1)第一:(Student爲一個類)spring框架會基於屬性的類型的首字母小寫(student)做爲key去bean池(單例)中(多例用的時候才建立)去尋找對應的value(這個value就是對象),在注入給這個屬性名(注入的實際上是一個地址而並不是對象);
(2)第二:(Student爲接口類型)若該實現類只有一個,則直接注入;
(3)第三:若該接口的實現類有多個,此時會根據屬性名student,去查找對應的實現類建立的對象(這個對象存在map中的key爲類名首字母小寫),找到直接注入,找不到就直接拋異常:NoUniqueBeanDefinitionException
解決辦法兩種:(通常開發中都不推薦)mybatis方法1:修改bean的名字(默認是類名首字母小寫);@Component (「指定的名字」),這個指定的名字必須與咱們要注入的屬性名一摸同樣; 方法2:修改屬性名(改爲某個實現類的類名首字母小寫);經常使用方法就是指定用哪一個實現類!使用( @Qualifier 註解)
不明確這個類屬於哪層時能夠用該註解,將該類 的實 列交給spring容器建立
該註解用於描述控制層,將控制層的實例建立權限 交給spring容器
返回的是view
該註解用於描述業務層,由spring來建立@Service 描述的類的實例
該註解用於延遲對象的建立,在springboot項目中,對於 單例對象默認在項目啓動時建立,這樣會耗時耗資源-單例對象是要存 到bean池中的,一般配合[@Scope(singleton)]註解使用,對於 @Scope("prototype")描述的類的對象就是在須要時建立,按需加 載,故@Lazy註解對多利做用域對象不起做用
有兩個取值@Scope("prototype")、 @Scope("singleton")
(單元測試的註解)
知足如下條件 (1)訪問修飾符不能爲private (2)返回值必須爲void (3)方法參數必須時無參 (4)測試方法容許拋出異常擴展----測試的第二種方法(CommandLineRunner)
在啓動類(@SpringBootApplicaton)中實現這個接口,重寫 run()方法,在run()方法中寫咱們測試代碼;當啓動類啓動時會自動執行run()方法
一般用於配置類中,與@Configuration配合使用
@Bean描述的方法的返回值(返回的是一個對象)交給spring去 管理。此時能夠配合@Lazy註解使用
添加在數據層的接口上,通知spring,該接口的實現類有mybatis負責實現,該實現類的對象有mybatis建立,可是交給spring管理
添加在數據層接口的實現類上,將這個類交給Spring管理
當mybatis版本相對較低時,在動態sql中想要使用方法中的參數變量來獲取數據,就須要使用該註解對參數變量進行描述
也與jdk的版本有關
原理:mybatis中規範,默認條件下能夠進行但值傳遞 後端用任意的參數接收均可以,
有時可能進行多值傳遞,會將多值封裝爲map集合進行參數的傳遞
舊版本時若是須要封裝爲單值,則必須添加param
新版本時能夠自動添加@param,前提條件是多值傳遞
單值:數組 collection=「array」
單值:集合 collection=「list」
多值:利用@param註解封裝 collection=「key」
1.描述的方法的返回值不是view(不是一個頁面),
2.好比說能夠是一個字符串String---直接返回該字符串
3.當方法的返回值是一個或多個pojo對象(也能夠是map)時,springmvc去查看這個方法上是否有該註解,如有,就會pojo對象轉成JSON格式的字符串(字符串數組)
@Controller+@ReponseBody
通常適用於ajax,不走視圖解析器,而且返回json數據
當咱們的方法參數要從url中獲取參數時,就須要使用該註解--restful風格中經常使用!
若是url中的名字與方法參數名不一致,還能夠指定
url="menu/menulist" 1.url中的名字與方法參數名一致,能夠直接加上@PathVariable,不用指定別名 @RequestMapping("{do}/{dolist}") public String domain(@PathVariable String dolist){ return dolist; } @RequestMapping("{do}/{dolist}") public String domain(@PathVariable String do){ return do; } * * * 2.url中的名字與方法參數名不一致,還能夠指定,代表方法參數中的變量時來自url中的哪個 (通常不用這樣的,直接寫成同樣就能夠了(第一種)) @RequestMapping("{do}/{dolist}") public String domain(@PathVariable("dolist")String name){ return name; } @RequestMapping("{do}/{dolist}") public String domain(@PathVariable("do")String name){ return name; }
請求映射-提供映射路徑-可使用在類上、方法上
該註解描述類爲全局異常處理類
當Spring mvc(web)的控制層出現異常,首先會檢查controller中是否有對應的異常處理方法,有則直接執行,若沒有,就會檢索是否有@ControllerAdvice描述的類,如有,則再去檢索類中是否有對應的異常處理方法。。
該註解描述的方法,爲一個異常處理的方法,註解中須要指定能處理的異常類型(RuntimException.class-字節碼對象),表示該方法可以處理該類型的異常以及子類異常。 在異常處理方法中,一般須要一個異常參數,用來接收異常對象。 方法的返回值一般是一個對象(json格式-知足響應式佈局),一般與@ReponseBody註解結合使用