Java常用的註解

註解本身沒有功能的,就和 xml 一樣。註解和 xml 都是一種元數據,元數據即解釋數據的數據,這就是所謂配置。

Spring 部分

聲明 bean 的註解

  • @Component 組件,沒有明確的角色,在類上使用註解

  • @Component,該註解的 value 屬性用於指定該 bean 的 id 值

  • @Repository 用於對 DAO 實現類進行註解

  • @Service 用於對 Service 實現類進行註解

  • @Controller 用於對 Controller 實現類進行註解

注入 bean 的註解

  • @Autowired:由 Spring 提供

  • @Inject:由 JSR-330 提供

  • @Resource:由 JSR-250 提供

都可以註解在 set 方法和屬性上,推薦註解在屬性上(一目瞭然,少寫代碼)。

Java 配置類相關注解

  • @Configuration 表示當前類充當 Spring 容器,即所有的 Bean 將由這個類來創建(類上)

  • @Bean 註解在方法上,聲明當前方法的返回值爲一個 bean ,替代 xml 中的方式(方法上)

  • @Configuration 聲明當前類爲配置類,其中內部組合了 @Component 註解,表明這個類是一個 bean (類上)

  • @ComponentScan 用於對 Component 進行掃描,相當於 xml 中的(類上)

  • @WishlyConfiguration 爲 @Configuration 與 @ComponentScan 的組合註解,可以替代這兩個註解

切面(AOP)相關注解

Spring 支持 AspectJ 的註解式切面編程。

  • @Aspect 指定當前 POJO 類將作爲切面(類上)

使用 @After 、 @Before 、 @Around 定義建言 (advice) ,可直接將攔截規則(切點)作爲參數。

  • @After 在方法執行之後執行(方法上)

  • @Before 在方法執行之前執行(方法上)

  • @Around 在方法執行之前與之後執行(方法上)

  • @Pointcut 定義切入點

在 Java 配置類中使用 @EnableAspectJAutoProxy 註解開啓 Spring 對 AspectJ 代理的支持(類上)

@Bean 的屬性支持

  • @Scope 設置 Spring 容器如何新建 Bean 實例(方法上,得有 @Bean )

其設置類型包括:

  • Singleton (單例,一個 Spring 容器中只有一個 bean 實例,默認模式)

  • Protetype (每次調用新建一個 bean )

  • Request ( web 項目中,給每個 http request 新建一個 bean )

  • Session ( web項 目中,給每個 http session 新建一個 bean )

  • GlobalSession (給每一個 global http session 新建一個 Bean 實例)

  • @StepScope 在 Spring Batch 中還有涉及

  • @PostConstruct 由 JSR-250 提供,在構造函數執行完之後執行,等價於 xml 配置文件中 bean 的 initMethod

  • @PreDestory 由 JSR-250 提供,在 Bean 銷燬之前執行,等價於 xml 配置文件中 bean 的 destroyMethod

@Value註解

@Value 爲屬性注入值(屬性上)支持如下方式的注入:

1. 注入普通字符串

@Value("normal")

private String normal

2. 注入文件資源

@Value("classpath:com/huang/spring/configinject/config.txt")

private Resource resourceFile;

3. 注入 URL 資源

@Value("https://www.huangyuanzhi.top")

private Resource testUrl;

4. 注入表達式結果

@Value("#{ T(java.lang.Math).random() * 100.0 }")

private double randomNumber;

5. 注入其它 bean 屬性

@Value("{domeClass.name}")
String name;

6. 注入配置文件

@Value("${book.name}")

private String bookName;

注入配置使用方法:

(1) 編寫配置文件(test.properties)

book.name=《三體》

(2) @PropertySource 加載配置文件(類上)

@PropertySource("classpath:com/huang/spring/configinject/config.properties")

(3) 還需配置一個 PropertySourcesPlaceholderConfigurer 的 bean 。

環境切換

  • @Profile 通過設定 Environment 的 ActiveProfiles 來設定當前 context 需要使用的配置環境。(類或方法上)

  • @Conditional Spring4 中可以使用此註解定義條件話的 bean ,通過實現 Condition 接口,並重寫 matches 方法,從而決定該 bean 是否被實例化。(方法上)

異步相關

  • @EnableAsync 配置類中,通過此註解開啓對異步任務的支持,敘事性 AsyncConfigurer 接口(類上)

  • @Async 在實際執行的 bean 方法使用該註解來申明其是一個異步任務(方法上或類上所有的方法都將異步,需要 @EnableAsync 開啓異步任務)

定時任務相關

  • @EnableScheduling 在配置類上使用,開啓計劃任務的支持(類上)

  • @Scheduled 來申明這是一個任務,包括 cron , fixDelay , fixRate 等類型(方法上,需先開啓計劃任務的支持)

@Enable* 註解說明

這些註解主要用來開啓對xxx的支持。

  • @EnableAspectJAutoProxy 開啓對 AspectJ 自動代理的支持

  • @EnableAsync 開啓異步方法的支持

  • @EnableScheduling 開啓計劃任務的支持

  • @EnableWebMvc 開啓 Web MVC 的配置支持

  • @EnableConfigurationProperties 開啓對 @ConfigurationProperties 註解配置 Bean 的支持

  • @EnableJpaRepositories 開啓對 SpringData JPA Repository 的支持

  • @EnableTransactionManagement 開啓註解式事務的支持

  • @EnableCaching 開啓註解式的緩存支持

測試相關注解

  • @RunWith 運行器,Spring 中通常用於對 JUnit 的支持

  • @ContextConfiguration 用來加載配置 ApplicationContext ,其中 classes 屬性用來加載配置類

Spring MVC 部分

  • @EnableWebMvc 在配置類中開啓 Web MVC 的配置支持,如一些 ViewResolver 或者 MessageConverter 等,若無此句,重寫 WebMvcConfigurerAdapter 方法(用於對 SpringMVC 的配置)。

  • @Controller 表示當前類爲處理器

  • @RequestMapping 表示當前方法爲處理器方法;該方法要對 value 屬性所指定的 URL 進行處理與響應; 被註解的方法的方法名可以隨意。

  • @ResponseBody 支持將返回值放在 response 內,而不是一個頁面,通常用戶返回 json 數據(返回值旁或方法上)

  • @RequestBody 允許 request 的參數在 request 體中,而不是在直接連接在地址後面。(放在參數前)

  • @PathVariable 用於接收路徑參數,比如@ RequestMapping(“/hello/{name}”) 申明的路徑,將註解放在參數中前,即可獲取該值,通常作爲 Restful 的接口實現方法。

  • @RestController 該註解爲一個組合註解,相當於 @Controller 和 @ResponseBody 的組合,註解在類上,意味着,該 Controller 的所有方法都默認加上了 @ResponseBody。

  • @ControllerAdvice 通過該註解,我們可以將對於控制器的全局配置放置在同一個位置,註解了 @Controller 的類的方法可使用

  • @ExceptionHandler 、 @InitBinder 、 @ModelAttribute 註解到方法上,這對所有註解了 @RequestMapping 的控制器內的方法有效。

  • @ExceptionHandler 用於全局處理控制器裏的異常

  • @InitBinder 用來設置 WebDataBinder , WebDataBinder 用來自動綁定前臺請求參數到 Model 中。

  • @ModelAttribute 本來的作用是綁定鍵值對到 Model 裏,在 @ControllerAdvice 中是讓全局的 @RequestMapping 都能獲得在此處設置的鍵值對。

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