Java常用的注解

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

Spring 部分

聲明 bean 的注解

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

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

  • @Repository 用于對 DAO 實現(xiàn)類進行注解

  • @Service 用于對 Service 實現(xiàn)類進行注解

  • @Controller 用于對 Controller 實現(xiàn)類進行注解

注入 bean 的注解

  • @Autowired:由 Spring 提供

  • @Inject:由 JSR-330 提供

  • @Resource:由 JSR-250 提供

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

Java 配置類相關注解

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

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

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

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

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

切面(AOP)相關注解

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

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

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

  • @After 在方法執(zhí)行之后執(zhí)行(方法上)

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

  • @Around 在方法執(zhí)行之前與之后執(zhí)行(方法上)

  • @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 提供,在構造函數(shù)執(zhí)行完之后執(zhí)行,等價于 xml 配置文件中 bean 的 initMethod

  • @PreDestory 由 JSR-250 提供,在 Bean 銷毀之前執(zhí)行,等價于 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 。

環(huán)境切換

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

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

異步相關

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

  • @Async 在實際執(zhí)行的 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 數(shù)據(jù)(返回值旁或方法上)

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

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

  • @RestController 該注解為一個組合注解,相當于 @Controller 和 @ResponseBody 的組合,注解在類上,意味著,該 Controller 的所有方法都默認加上了 @ResponseBody。

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

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

  • @ExceptionHandler 用于全局處理控制器里的異常

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

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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容