注解本身沒有功能的,就和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 為屬性注入值(屬性上)
支持如下方式的注入:
注入普通字符
@Value("Michael Jackson")
String name;注入作業系統屬性
@Value("#{systemProperties['os.name']}")
String osName;注入運算式結果
@Value("#{ T(java.lang.Math).random() * 100 }")
String randomNumber;注入其它bean屬性
@Value("#{domeClass.name}")
String name;注入檔案資源
@Value("classpath:com/hgs/hello/test.txt")
String Resource file;注入網站資源
@Value("http://www.cznovel.com")
Resource url;注入組態檔
@Value("${book.name}")
String bookName;注入配置使用方法:
① 撰寫組態檔(test.properties)
book.name=《三體》
② @PropertySource 加載組態檔(類上)
@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的支持
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration 用來加載配置ApplicationContext,其中classes屬性用來加載配置類
@ContextConfiguration(classes={TestConfig.class})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都能獲得在此處設定的鍵值對。
----------------------------------------------------------------------------------------------------------------------------------------------------
spring和springMVC的注解重復的都是通用的
uj5u.com熱心網友回復:
@Value 和 @Bean 是什么區別,好像都能注入屬性
uj5u.com熱心網友回復:
@Bean 注入早于 @Value@Bean(value = "${jdbc.url}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/12749.html
標籤:Java相關
