作者:IT_faquir
鏈接:https://blog.csdn.net/IT_faquir
註解本身沒有功能的,就和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 為屬性注入值(屬性上)
支持如下方式的注入:
注入普通字符
<code>@Value("Michael Jackson") String name;/<code>
注入操作系統屬性
<code>@Value("#{systemProperties['os.name']}") String osName;/<code>
注入表達式結果
<code>@Value("#{ T(java.lang.Math).random() * 100 }") String randomNumber;/<code>
注入其它bean屬性
<code>@Value("#{domeClass.name}") String name;/<code>
注入文件資源
<code>@Value("classpath:com/hgs/hello/test.txt") String Resource file;/<code>
注入網站資源
<code>@Value("http://www.cznovel.com") Resource url;12/<code>
注入配置文件
<code>@Value("${book.name}") String bookName;/<code>
注入配置使用方法:
① 編寫配置文件(test.properties)
<code>book.name=《三體》/<code>
② @PropertySource 加載配置文件(類上)
<code>@PropertySource("classpath:com/hgs/hello/test/test.propertie")/<code>
③ 還需配置一個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的支持
<code>@RunWith(SpringJUnit4ClassRunner.class)1/<code>
@ContextConfiguration 用來加載配置ApplicationContext,其中classes屬性用來加載配置類
<code>@ContextConfiguration(classes={TestConfig.class})1/<code>
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都能獲得在此處設置的鍵值對。
如有遺漏或有誤的地方,希望幫忙指出。