springboot註解總結

   接觸springboot快一年了,對微服務的概念越來越熟悉。而自己也慢慢萌生了探索一下源碼的想法,寫此博客,只爲記錄一下自己的學習過程。這也是我第一次嘗試寫系列博客。

   我覺得學習springboot,首先需要了解的就是springboot豐富的註解。

常用註解:

1、@SpringBootApplication 申明讓spring boot自動給程序進行必要的配置,
等價於以默認屬性使用@Configuration,@EnableAutoConfiguration和@ComponentScan

2、@Configuration 等同於spring的XML配置文件;使用Java代碼可以檢查類型安全。

3、@EnableAutoConfiguration使spring獲取約定的配置進行自動配置。(默認從文件META-INF/spring.factories獲取自動配置類)

4、@ComponentScan 表示將該類自動發現(掃描)並註冊爲Bean,可以自動收集所有的Spring組件,
包括@Configuration類。我們經常使用@ComponentScan註解搜索beans,並結合@Autowired註解導入。
如果沒有配置的話,Spring Boot會掃描啓動類所在包下以及子包下的使用了@Service,@Repository等註解的類

5、@EnableScheduling 在 Spring Boot 的配置類中,標註上這個註解,就可以對項目中的方法某些方法使用@Schedule註解,將其變爲定時自動執行。
但只有兩種註解共同使用時,才能達到本註解應有的作用。(我的項目已經配置了quarz,禁止用這種方式。。。)

6、@Autowired 自動導入依賴的bean,這個註解大家都用過。。

7、@Qualifier 限定描述符除了能根據名字進行注入,但能進行更細粒度的控制如何選擇候選者

8、@ImportResource 用來加載xml配置文件,如果你想用xml完全可以的

9、@RestController 返回json字符串的數據,是@Controller和@ResponseBody的合集,直接可以編寫RESTFul的接口,返回規則也可配,這裏就不多寫了

10、@ServletComponentScan spring能夠掃描到自己編寫的servlet和filter,
SpringBootApplication 上使用@ServletComponentScan註解後,Servlet、Filter、Listener,
可以直接通過 @WebServlet、@WebFilter、@WebListener 註解自動註冊,無需其他代碼

11、@Import({DynamicDataSourceRegister.class}) 註冊動態多數據源(很少用)

12、@PropertySource(value = “classpath:spring/config.properties”)
通過@PropertySource註解將properties配置文件中的值存儲到Spring的 Environment中,Environment接口提供方法去讀取配置文件中的值,
參數是properties文件中定義的key值。上面是讀取一個配置文件,如果你想要讀取多個配置文件,請看下面代碼片段
@PropertySource(value = {“classpath:spring/config.properties”,”classpath:spring/news.properties”})  (很少用)

13、@EnableWebSocketMessageBroker 表示開啓使用STOMP協議來傳輸基於代理的消息,Broker就是代理的意思(很少用)

14、@Repository、@Service、@Controller,它們分別對應存儲層 Bean,業務層 Bean,和展示層 Bean,將類標識爲 Bean;
分別用於軟件系統的不同層次:
@Component 是一個泛化的概念,僅僅表示一個組件 (Bean) ,可以作用在任何層次。
@Service 通常作用在業務層,但是目前該功能與 @Component 相同。
@Constroller 通常作用在控制層,但是目前該功能與 @Component 相同。
通過在類上使用 @Repository、@Component、@Service 和 @Constroller 註解,Spring會自動創建相應的 BeanDefinition 對象,
並註冊到 ApplicationContext 中。這些類就成了 Spring 受管組件。這三個註解除了作用於不同軟件層次的類,
其使用方式與 @Repository 是完全相同的。

15、@Value(“${spring.datasource.url}”) 獲取 application 配置文件中的變量

16、@ConfigurationProperties 讀取application屬性配置文件中的屬性

17、@ControllerAdvice 全局異常處理類,以將對於控制器的全局配置放在同一個位置。

  • 註解了@Controller的類的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute註解到方法上。
  • ControllerAdvice註解將作用在所有註解了@RequestMapping的控制器的方法上
  • ExceptionHandler:用於全局處理控制器裏的異常。
  • InitBinder:用來設置WebDataBinder,用於自動綁定前臺請求參數到Model中。
  • ModelAttribute:本來作用是綁定鍵值對到Model中,此處讓全局的@RequestMapping都能獲得在此處設置的鍵值對。

18、@WebFilter 將一個實現了javax.servlet.Filter接口的類定義爲過濾器

  • 屬性filterName聲明過濾器的名稱,可選
  • 屬性urlPatterns指定要過濾的URL模式,也可使用屬性value來聲明.(指定要過濾的URL模式是必選屬性)

19、@Scope(“prototype”) Spring默認產生的bean是單例的,”prototype” 表示原型即每次都會new一個新的出來

20、@Bean標註在方法上(返回某個實例的方法),作用爲註冊bean對象

  • @Bean註解在返回實例的方法上,如果未通過@Bean指定bean的名稱,則默認與標註的方法名相同;
  • @Bean註解默認作用域爲單例singleton作用域,可通過@Scope(“prototype”)設置爲原型作用域;
  • 既然@Bean的作用是註冊bean對象,那麼完全可以使用@Component、@Controller、@Service、@Ripository等
    註解註冊bean,當然需要配置@ComponentScan註解進行自動掃描

21、@EnableAspectJAutoProxy表示開啓AOP代理自動配置,如果配@EnableAspectJAutoProxy表示使用cglib進行代理對象的生成;設置@EnableAspectJAutoProxy(exposeProxy=true)表示通過aop框架暴露該代理對象,aopContext能夠訪問.

 

Controller層常用註解:

1、@PathVariable 當使用@RequestMapping URI template 樣式映射時,即 someUrl/{paramId},
這時的paramId可通過 @Pathvariable註解綁定它傳過來的值到方法的參數上

2、@RequestHeader 可以把Request請求header部分的值綁定到方法的參數上如(@RequestHeader("Accept-Encoding") String encoding){}

3、@CookieValue 可以把Request header中關於cookie的值綁定到方法的參數上如(@CookieValue("JSESSIONID") String cookie){}

4、@RequestParam

  • 常用來處理簡單類型的綁定,通過 Request.getParameter() 獲取的String可直接轉換爲簡單類型的情況
    ( String–> 簡單類型的轉換操作由ConversionService配置的轉換器來完成);
    因爲使用request.getParameter()方式獲取參數,所 以可以處理get 方式中queryString的值,也可以處理post方式中 body data的值;
  • 用來處理Content-Type: 爲 application/x-www-form-urlencoded編碼的內容,提交方式GET、POST;
  • 該註解有兩個屬性: value、required; value用來指定要傳入值的id名稱,required用來指示參數是否必須綁定;

5、@RequestBody 通過使用HandlerAdapter默認配置的HttpMessageConverters來解析Request請求的Body部分數據並將相應的數據綁定到Controller中方法的參數上,其常用來處理Content-Type不是application/x-www-form-urlencoded編碼的內容,例如application/json, application/xml等。

  • 它是通過使用HandlerAdapter 配置的HttpMessageConverters來解析post data body,然後綁定到相應的bean上的。
  • 因爲配置有FormHttpMessageConverter,所以也可以用來處理 application/x-www-form-urlencoded的內容,處理完的結果放在一個MultiValueMap<String, String>裏,這種情況在某些特殊需求下使用。

6、@SessionAttributes 用來綁定HttpSession中的attribute對象的值,便於在方法中的參數裏使用。
該註解有value、types兩個屬性,可以通過名字和類型指定要使用的attribute 對象

7、@ModelAttribute 該註解有兩個用法,一個是用於方法上,一個是用於參數上:

  • 用於方法上時: 通常用來在處理@RequestMapping之前,爲請求綁定需要從後臺查詢的model;
  • 用於參數上時: 用來通過名稱對應,把相應名稱的值綁定到註解的參數bean上;要綁定的值來源於:
    • @SessionAttributes 啓用的attribute 對象上;
    • @ModelAttribute 用於方法上時指定的model對象;
    • 上述兩種情況都沒有時,new一個需要綁定的bean對象,然後把request中按名稱對應的方式把值綁定到bean中,
      這種方式實際的效果就是在調用@RequestMapping的方法之前,爲request對象的model裏put(“account”, Account)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章