註解本身沒有功能的,就和 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 都能獲得在此處設置的鍵值對。