SpringBoot詳細列舉常用注解的說明
1 概述
IOC 是Spring 最為重要的功能之一,就是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用Spring注解方式或者Spring XML配置方式。
簡言之,注解本身沒有什么業(yè)務(wù)功能的,和 xml 一樣,是一種元數(shù)據(jù),元數(shù)據(jù)即解釋數(shù)據(jù)的數(shù)據(jù),這就是所謂配置。
2 常用注解
@Component
表示一個帶注釋的類是一個“組件”,成為Spring管理的Bean。當(dāng)使用基于注解的配置和類路徑掃描時,這些類被視為自動檢測的候選對象。同時@Component還是一個元注解。
所謂元注解,其實就是可以注解到別的注解上的注解,被注解的注解稱之為組合注解,組合注解具備其上元注解的功能。
@Service
組合注解(組合了@Component注解),應(yīng)用在service層(業(yè)務(wù)邏輯層)。
@Repository
組合注解(組合了@Component注解),應(yīng)用在dao層(數(shù)據(jù)訪問層)。
@Controller
組合注解(組合了@Component注解),應(yīng)用在MVC層(控制層),DispatcherServlet會自動掃描注解了此注解的類,然后將web請求映射到注解了@RequestMapping的方法上。
@RequestMapping
用于映射Web請求,包括訪問路徑和參數(shù)。(類或方法上)
@ResponseBody
注解的作用是將controller的方法返回的對象通過適當(dāng)?shù)霓D(zhuǎn)換器轉(zhuǎn)換為指定的格式之后,寫入到response對象的body區(qū),通常用來返回JSON數(shù)據(jù)或者是XML數(shù)據(jù)。
注意:在使用此注解之后不會再走視圖處理器,而是直接將數(shù)據(jù)寫入到輸入流中,他的效果等同于通過response對象輸出指定格式的數(shù)據(jù)。
@RequestBody
將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。
作用:
- 該注解用于讀取Request請求的body部分數(shù)據(jù),使用系統(tǒng)默認配置的HttpMessageConverter進行解析,然后把相應(yīng)的數(shù)據(jù)綁定到要返回的對象上;
- 再把HttpMessageConverter返回的對象數(shù)據(jù)綁定到 controller中方法的參數(shù)上。
使用時機
GET、POST方式提時, 根據(jù)request header Content-Type的值來判斷:
- application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數(shù)據(jù)@RequestParam, @ModelAttribute也可以處理,當(dāng)然@RequestBody也能處理)。
- multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數(shù)據(jù))
- 其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數(shù)據(jù),必須使用@RequestBody來處理)
PUT方式提交時, 根據(jù)request header Content-Type的值來判斷
application/x-www-form-urlencoded, 必須;multipart/form-data, 不能處理;其他格式, 必須
舉個例子:
@RequestMapping(value = "user/login") @ResponseBody // 將ajax(datas)發(fā)出的請求寫入 User 對象中 public User login(@RequestBody User user) { // 這樣就不會再被解析為跳轉(zhuǎn)路徑,而是直接將user對象寫入 HTTP 響應(yīng)正文中 return user;
@PathVariable
用于接收路徑參數(shù),比如@RequestMapping(“/hello/{name}”)申明的路徑,將注解放在參數(shù)中前,即可獲取該值,通常作為Restful的接口實現(xiàn)方法。
@RestController
該注解為一個組合注解,相當(dāng)于@Controller和@ResponseBody的組合,注解在類上,意味著,該Controller的所有方法都默認加上了@ResponseBody。
@ExceptionHandler
用于全局處理控制器里的異常。為什么會有這個注解,原因在于:
- Exception什么的異常太過廣泛,我們直接拋出所有異常信息,對用戶而言是非常不友好的。
- 在事務(wù)管理里,如果我們自定義的異常繼承的是Exception,則事務(wù)無效。如果我們是繼承RuntimeException,則不會出現(xiàn)這個問題。
@ModelAttribute
本來的作用是綁定鍵值對到 Model 里,在 @ControllerAdvice 中是讓全局的@RequestMapping都能獲得在此處設(shè)置的鍵值對。
@Autowired
可以對成員變量、方法和構(gòu)造函數(shù)進行標(biāo)注,來完成自動裝配的工作,@Autowired標(biāo)注可以放在成員變量上,也可以放在成員變量的set方法上,也可以放在任意方法上表示,自動執(zhí)行當(dāng)前方法,如果方法有參數(shù),會在IOC容器中自動尋找同類型參數(shù)為其傳值。
注意:@Autowired是根據(jù)類型進行自動裝配的,如果需要按名稱進行裝配,則需要配合@Qualifier使用;
@Configuration
聲明當(dāng)前類是一個配置類(相當(dāng)于一個Spring配置的xml文件)。
@Bean
注解在方法上,聲明當(dāng)前方法的返回值為一個Bean。返回的Bean對應(yīng)的類中可以定義init()方法和destroy()方法,然后在@Bean(initMethod=”init”,destroyMethod=”destroy”)定義,在構(gòu)造之后執(zhí)行init,在銷毀之前執(zhí)行destroy。
@ComponentScan
自動掃描指定包下所有使用@Service、@Component、@Controller、@Repository的類并注冊。
@Aspect
聲明一個切面(類上) 使用@After、@Before、@Around定義建言(advice),可直接將攔截規(guī)則(切點)作為參數(shù)。
- @After :在方法執(zhí)行之后執(zhí)行(方法上)。
- @Before: 在方法執(zhí)行之前執(zhí)行(方法上)。
- @Around: 在方法執(zhí)行之前與之后執(zhí)行(方法上)。
- @PointCut: 聲明切點 在java配置類中使用@EnableAspectJAutoProxy注解開啟Spring對AspectJ代理的支持。AspectJ靜態(tài)編譯織入(Aspect for java),他其實是一套獨立的面向切面編程的解決方案。Spring中雖然使用了Aspect的Annotation,但是并沒有使用它的編譯器和織入器。
@Scope
定義我們采用什么模式去創(chuàng)建Bean(方法上,得有@Bean) 其設(shè)置類型包括:
- Singleton (單例,一個Spring容器中只有一個bean實例,默認模式)
- Prototype(每次調(diào)用新建一個bean)
- Request (web項目中,給每個http request新建一個bean)
- Session(web項目中,給每個http session新建一個bean)
- GlobalSession(給每一個 global http session新建一個Bean實例)。
@Scope("prototype")//多實例,IOC容器啟動創(chuàng)建的時候,并不會創(chuàng)建對象放在容器在容器當(dāng)中,當(dāng)你需要的時候,需要從容器當(dāng)中取該對象的時候,就會創(chuàng)建。 @Scope("singleton")//單實例 IOC容器啟動的時候就會調(diào)用方法創(chuàng)建對象,以后每次獲取都是從容器當(dāng)中拿同一個對象(map當(dāng)中)。 @Scope("request")//同一個請求創(chuàng)建一個實例 @Scope("session")//同一個session創(chuàng)建一個實例
@PostConstruct
標(biāo)注在方法上,該方法在構(gòu)造函數(shù)執(zhí)行完成之后執(zhí)行。
@PreDestory
標(biāo)注在方法上,該方法在對象銷毀之前執(zhí)行。
@Value
經(jīng)常與Sping EL表達式語言一起使用,注入普通字符,系統(tǒng)屬性,表達式運算結(jié)果,其他Bean的屬性,文件內(nèi)容,網(wǎng)址請求內(nèi)容,配置文件屬性值等。
@EnableAsync
配置類中,通過此注解開啟對異步任務(wù)的支持,敘事性AsyncConfigurer接口。
@Async
在實際執(zhí)行的bean方法使用該注解來申明其是一個異步任務(wù)(方法上或類上所有的方法都將異步,需要@EnableAsync開啟異步任務(wù))
@EnableScheduling
在配置類上使用,開啟計劃任務(wù)的支持。
@Scheduled
來申明這是一個任務(wù),包括cron,fixDelay,fixRate等類型。
@Enable*注解說明
這些注解主要用來開啟對xxx的支持。 @EnableAspectJAutoProxy 開啟對AspectJ自動代理的支持。
- @EnableAsync: 開啟異步方法的支持。
- @EnableScheduling: 開啟計劃任務(wù)的支持。
- @EnableWebMvc :開啟Web MVC的配置支持。
- @EnableConfigurationProperties :開啟對@ConfigurationProperties注解配置Bean的支持。
- @EnableJpaRepositories:開啟對SpringData JPA Repository的支持。
- @EnableTransactionManagement:開啟注解式事務(wù)的支持。
- @EnableTransactionManagement: 開啟注解式事務(wù)的支持。
- @EnableCaching: 開啟注解式的緩存支持。
到此這篇關(guān)于SpringBoot詳細列舉常用注解的使用的文章就介紹到這了,更多相關(guān)SpringBoot注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用ArrayList實現(xiàn)撲克牌的示例代碼
學(xué)習(xí)了關(guān)于集合類的知識,我們可以做一個小項目來加深對集合類知識的學(xué)習(xí)!本文就來利用ArrayList實現(xiàn)撲克牌發(fā)牌洗牌效果,需要的可以參考一下2022-10-10Maven發(fā)布項目 (jar包) 到Nexus私服中的操作
這篇文章主要介紹了Maven發(fā)布項目 (jar包) 到Nexus私服中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10關(guān)于SpringBoot啟動速度慢的原因總結(jié)
這篇文章主要介紹了關(guān)于SpringBoot啟動速度慢的原因總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05深入理解java內(nèi)置鎖(synchronized)和顯式鎖(ReentrantLock)
這篇文章主要介紹了Java多線程之內(nèi)置鎖(synchronized)和顯式鎖(ReentrantLock)的深入理解新的和用法,具有一定參考價值,需要的朋友可以了解下。2017-11-11