歡迎光臨
每天分享高質量文章

Java 必須掌握的 20+ 種 Spring 常用註解

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

本文主要羅列Spring|SpringMVC相關註解的簡介。

Spring部分

1.宣告bean的註解

  • @Component 元件,沒有明確的角色
  • @Service 在業務邏輯層使用(service層)
  • @Repository 在資料訪問層使用(dao層)
  • @Controller 在展現層使用,控制器的宣告(C)

2.註入bean的註解

  • @Autowired:由Spring提供
  • @Inject:由JSR-330提供
  • @Resource:由JSR-250提供

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

3.java配置類相關註解

  • @Configuration 宣告當前類為配置類,相當於xml形式的Spring配置(類上)
  • @Bean 註解在方法上,宣告當前方法的傳回值為一個bean,替代xml中的方式(方法上)
  • @Configuration 宣告當前類為配置類,其中內部組合了@Component註解,表明這個類是一個bean(類上)
  • @ComponentScan 用於對Component進行掃描,相當於xml中的(類上)
  • @WishlyConfiguration 為@Configuration與@ComponentScan的組合註解,可以替代這兩個註解

4.切麵(AOP)相關註解

Spring支援AspectJ的註解式切麵程式設計。

  • @Aspect 宣告一個切麵(類上。使用@After、@Before、@Around定義建言(advice),可直接將攔截規則(切點)作為引數。
  • @After 在方法執行之後執行(方法上)
  • @Before 在方法執行之前執行(方法上)
  • @Around 在方法執行之前與之後執行(方法上)
  • @PointCut 宣告切點。在java配置類中使用@EnableAspectJAutoProxy註解開啟Spring對AspectJ代理的支援(類上)

5.@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

6.@Value註解

  • @Value 為屬性註入值(屬性上)

支援如下方式的註入:

》註入普通字元

  1. @Value("Michael Jackson")
  2. String name;

》註入作業系統屬性

  1. @Value("#{systemProperties['os.name']}")
  2. String osName;

》註入運算式結果

  1. @Value("#{ T(java.lang.Math).random() * 100 }")
  2. String randomNumber;

》註入其它bean屬性

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

》註入檔案資源

  1. @Value("classpath:com/hgs/hello/test.txt")
  2. String Resource file;

》註入網站資源

  1. @Value("http://www.cznovel.com")
  2. Resource url;12

》註入配置檔案

  1. @Value("${book.name}")
  2. String bookName;

註入配置使用方法:

  • 編寫配置檔案(test.properties)
  1. book.name=《三體》

② @PropertySource 載入配置檔案(類上)

  1. @PropertySource("classpath:com/hgs/hello/test/test.propertie")

③ 還需配置一個PropertySourcesPlaceholderConfigurer的bean。

7.環境切換

  • @Profile 透過設定Environment的ActiveProfiles來設定當前context需要使用的配置環境。(類或方法上)
  • @Conditional Spring4中可以使用此註解定義條件話的bean,透過實現Condition介面,並重寫matches方法,從而決定該bean是否被實體化。(方法上)

8.非同步相關

  • @EnableAsync 配置類中,透過此註解開啟對非同步任務的支援,敘事性AsyncConfigurer介面(類上)
  • @Async 在實際執行的bean方法使用該註解來申明其是一個非同步任務(方法上或類上所有的方法都將非同步,需要@EnableAsync開啟非同步任務)

9.定時任務相關

  • @EnableScheduling 在配置類上使用,開啟計劃任務的支援(類上)
  • @Scheduled 來申明這是一個任務,包括cron,fixDelay,fixRate等型別(方法上,需先開啟計劃任務的支援)

10.@Enable*註解說明

這些註解主要用來開啟對xxx的支援。

  • @EnableAspectJAutoProxy 開啟對AspectJ自動代理的支援
  • @EnableAsync 開啟非同步方法的支援
  • @EnableScheduling 開啟計劃任務的支援
  • @EnableWebMvc 開啟Web MVC的配置支援
  • @EnableConfigurationProperties 開啟對@ConfigurationProperties註解配置Bean的支援
  • @EnableJpaRepositories 開啟對SpringData JPA Repository的支援
  • @EnableTransactionManagement 開啟註解式事務的支援
  • @EnableTransactionManagement 開啟註解式事務的支援
  • @EnableCaching 開啟註解式的快取支援

11.測試相關註解

  • @RunWith 執行器,Spring中通常用於對JUnit的支援
  1. @RunWith(SpringJUnit4ClassRunner.class)1
  • @ContextConfiguration 用來載入配置ApplicationContext,其中classes屬性用來載入配置類
  1. @ContextConfiguration(classes={TestConfig.class})

12.SpringMVC部分

  • @EnableWebMvc 在配置類中開啟Web MVC的配置支援,如一些ViewResolver或者MessageConverter等,若無此句,重寫WebMvcConfigurerAdapter方法(用於對SpringMVC的配置)。
  • @Controller 宣告該類為SpringMVC中的Controller
  • @RequestMapping 用於對映Web請求,包括訪問路徑和引數(類或方法上)
  • @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都能獲得在此處設定的鍵值對。

如有遺漏或有誤的地方,希望幫忙指出。

贊(0)

分享創造快樂