Spring注解歸納總結(jié)
分類
組件注解(聲明bean的注解)
組件注解(聲明bean的注解) | |
---|---|
@Component | 組件,沒有明確的角色 |
@Controller | 在展現(xiàn)層使用采幌,控制器的聲明 |
@Service | 在業(yè)務(wù)邏輯層使用(service層) |
@Repository | 在數(shù)據(jù)訪問層使用(dao層) |
@Component(“xxx”)
指定某個類是容器的bean苞也,@Component(value="xx")相當(dāng)于<bean id="xx" />璃氢,其中value可以不寫扇苞。用于標(biāo)注類為容器bean的注解有四個据某,主要用于區(qū)別不同的組件類橡娄,提高代碼的可讀性
@Component,用于標(biāo)注一個普通的類
@Controller 用于標(biāo)注一個控制器類
@Service 用于標(biāo)注業(yè)務(wù)邏輯類
@Repository 用于標(biāo)注DAO數(shù)據(jù)訪問類
現(xiàn)在這幾個注解沒有什么區(qū)別诗箍,盡量根據(jù)類的不同功能選擇合適的注解癣籽。
注解用于修飾類挽唉,當(dāng)不寫value屬性值時,默認(rèn)值為類名首字母小寫筷狼。
組件掃描注解
組件掃描注解 | |
---|---|
@ComponentScan | 用于對Component進(jìn)行掃描瓶籽,相當(dāng)于xml中的context:component-scan/(類上) |
自動裝配(注入bean的注解)
自動裝配(注入bean的注解) | |
---|---|
@Resource | 由JSR-250提供 |
@Autowired | 組件,沒有明確的角色 |
@Inject | 由JSR-330提供 |
-
@Resource(name=“xx”)
@Resource 可以修飾成員變量也可以修飾set方法埂材。當(dāng)修飾成員變量時可以不寫set方法塑顺,此時spring會直接使用j2ee規(guī)范的Field注入。
@Resource有兩個比較重要的屬性俏险,name和type- 如果指定了name和type严拒,則從Spring容器中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常;
- 如果指定了name竖独,則從spring容器查找名稱(id)匹配的bean進(jìn)行裝配裤唠,找不到則拋出異常;
- 如果指定了type,則從spring容器中找到類型匹配的唯一bean進(jìn)行裝配莹痢,找不到或者找到多個种蘸,都會拋出異常;
- 如果既沒有指定name,又沒有指定type竞膳,則自動按照byName方式進(jìn)行裝配
- 如果沒有寫name屬性值時
- 修飾成員變量航瞭,此時name為成員變量名稱
- 修飾set方法,此時name 為set方法的去掉set后首字母小寫得到的字符串
-
@Autowired(required=false)
@Autowired可以修飾構(gòu)造器坦辟,成員變量刊侯,set方法,普通方法锉走。@Autowired默認(rèn)使用byType方式自動裝配滔吠。required標(biāo)記該類型的bean是否時必須的,默認(rèn)為必須存在(true)挠日。
可以配合@Qualifier(value="xx"),實(shí)現(xiàn)按beanName注入疮绷。- required=true(默認(rèn)),為true時嚣潜,從spring容器查找和指定類型匹配的bean冬骚,匹配不到或匹配多個則拋出異常
- 使用@Qualifier("xx"),則會從spring容器匹配類型和 id 一致的bean,匹配不到則拋出異常
- @Autowired修飾成員變量懂算。該類型為成員變量類型
- @Autowired修飾方法只冻,構(gòu)造器。注入類型為參數(shù)的數(shù)據(jù)類型计技,當(dāng)然可以有多個參數(shù)
bean相關(guān)注解(Bean的屬性支持)
bean相關(guān)注解(Bean的屬性支持) | |
---|---|
@Bean | 注解在方法上喜德,聲明當(dāng)前方法的返回值為一個bean,替代xml中的方式(方法上) |
@Scope | 設(shè)置Spring容器如何新建Bean實(shí)例(方法上垮媒,得有@Bean) |
@DependsOn | 該注解也是配合@Component這類注解使用舍悯,用于強(qiáng)制初始化其他bean |
@Lazy | |
@PostConstruct | (singleton作用域)的生命周期的行為注解 |
@PreDestroy | (singleton作用域)的生命周期的行為注解 |
-
@Bean(name=“xxx”)
修飾方法航棱,該方法的返回值定義為容器中的bean。該注解相當(dāng)于<bean />元素
常用的屬性- name:bean id 萌衬。name可以省略饮醇,省略時name值為方法名。
- autowire: 是否自動注入秕豫,默認(rèn)Autowire . NO
- initMethod:bean的初始化方法朴艰。在依賴注入之后執(zhí)行< bean id="" init-method="">
- destroyMethod: spring容器關(guān)閉時bean調(diào)用的方法 < bean id="" destroty-method="">
- 當(dāng)然@Bean還可以配合@Scope指定bean的作用域
@Scope(“prototype”)
該注解和@Component這一類注解聯(lián)合使用,用于標(biāo)記該類的作用域混移,默認(rèn)singleton祠墅。也可以和@Bean一起使用,此時@Scope修飾一個方法歌径。@Lazy(true)
指定bean是否延時初始化饵隙,相當(dāng)于< bean id="xx" lazy-init=""> ,默認(rèn)false沮脖。@Lazy可以和@Component這一類注解聯(lián)合使用修飾類金矛,也可以和@Bean一起使用修飾方法
注:此處初始化不是指不執(zhí)行init-method,而是不創(chuàng)建bean實(shí)例和依賴注入勺届。只有當(dāng)該bean(被@Lazy修飾的類或方法)被其他bean引用(可以是自動注入的方式)或者執(zhí)行g(shù)etBean方法獲取驶俊,才會真正的創(chuàng)建該bean實(shí)例,其實(shí)這也是BeanFactory的執(zhí)行方式免姿。@PostConstructor和@PreDestroy
@PostConstructor和@PreDestroy這兩個注解是j2ee規(guī)范下的注解饼酿。這兩個注解用于修飾方法,spring用這兩個注解管理容器中spring生命周期行為胚膊。
@PostConstructor 從名字可以看出構(gòu)造器之后調(diào)用,相當(dāng)于< bean init-method="">故俐。就是在依賴注入之后執(zhí)行
@PreDestroy 容器銷毀之前bean調(diào)用的方法,相當(dāng)于 < bean destroy-method="">
AOP 相關(guān)注解
該注解是AspectJ中的注解紊婉,并不是spring提供的药版,所以還需要導(dǎo)入aspectjweaver.jar,aspectjrt.jar喻犁,除此之外還需要依賴aopalliance.jar
AOP 相關(guān)注解 | |
---|---|
@Aspect | 修飾Java類槽片,指定該類為切面類。當(dāng)spring容器檢測到某個bean被@Aspect修飾時肢础,spring容器不會對該bean做增強(qiáng)處理(bean后處理器增強(qiáng)还栓,代理增強(qiáng)) |
@Before | 修飾方法,before增強(qiáng)處理传轰。有一個value屬性用于指定切入點(diǎn)表達(dá)式剩盒。用于對目標(biāo)方法(切入點(diǎn)表達(dá)式指定方法)執(zhí)行前做增強(qiáng)處理】埽可以用于權(quán)限檢查辽聊,登陸檢查 |
@AfterReturning | 修飾方法纪挎,afterreturning增強(qiáng)處理。目標(biāo)方法正常結(jié)束后做增強(qiáng)處理常用屬性 1身隐、{pointcut/value:定義切入點(diǎn)} 2廷区、{returning:指定一個參數(shù)名唯灵,用于接受目標(biāo)方法正常結(jié)束時返回的值贾铝。在增強(qiáng)方法中定義同名的參數(shù)。} |
@AfterThrowing | 修飾方法埠帕,afterthrowing增強(qiáng)處理垢揩。當(dāng)目標(biāo)程序方法拋出 異常或者異常無法捕獲時敛瓷,做增強(qiáng)處理叁巨。常用屬性:1、{pointcut/value :指定切入點(diǎn)表達(dá)式}2呐籽、{throwing:指定一個形參锋勺,在增強(qiáng)方法中定義同名形參,用于訪問目標(biāo)方法拋出的異常} |
@After | 修飾方法 狡蝶,after增強(qiáng)處理庶橱。無論方法是否正常結(jié)束,都會調(diào)用該增強(qiáng)處理(@After= @AfterReturning+@AfterThrowing)贪惹。一般用于釋放資源苏章。有一個value屬性,用于指定切入點(diǎn)表達(dá)式奏瞬。 |
@Around | 修飾方法枫绅, around增強(qiáng)處理。該處理可以目標(biāo)方法執(zhí)行之前和執(zhí)行之后織入增強(qiáng)處理硼端,可以看作時@Before和@AfterReturning的總和并淋。有一個value屬性,指定切入點(diǎn)表達(dá)式珍昨。Around增強(qiáng)處理通常需要在線程安全的環(huán)境下使用预伺,如果@Before和@AfterReturning可以處理就沒必要使用@After Returning。當(dāng)定義一個Aound增前處理時曼尊,增強(qiáng)方法第一形參需要時ProceedingJoinPoint類型酬诀。ProceedingJoin Point有一個Object proceed()方法,用于執(zhí)行目標(biāo)方法,返回對象當(dāng)然也可以為目標(biāo)方法傳遞數(shù)組參數(shù)骆撇。 |
@Pointcut | 聲明切點(diǎn)在java配置類中使用@EnableAspectJAutoProxy注解開啟Spring對AspectJ代理的支持(類上) |
@Order | 當(dāng)不同的切面中的兩個增強(qiáng)處理需要在同一個連接點(diǎn)被織入時瞒御,spring aop可以指定不同切面類的增強(qiáng)處理優(yōu)先級。有一個value屬性神郊,指定一個int值肴裙,屬性值越小優(yōu)先級越高趾唱。 |
Java配置類相關(guān)注解
Java配置類相關(guān)注解 | |
---|---|
@Configuration | 修飾一個Java類,被修飾的類相當(dāng)于一個xml文件蜻懦,相當(dāng)于< beans> </ beans>在springboot中大量使用了該注解甜癞,該注解提供了一種使用Java類方式配置bean。 |
@Import | @Import({xxx.class})修飾Java類宛乃,用于向當(dāng)前配置類導(dǎo)入其他java配置類 |
@ImportResource | @ImportResource(”classpath: /aa.xml“)修飾Java類悠咱,用于向當(dāng)前注解類導(dǎo)入xml配置文件 |
@Value | @Value("${expression}")修飾成員變量或者 方法構(gòu)造器的參數(shù),常用于注入屬性文件中的值征炼。注意:@Value不能對 static 屬性注入析既。 |
@ConfigurationProperties | 用于從屬性文件中注入值 ,修飾類 |
@PropertySource | 用于加載配置文件 |
- @PropertySource(value=“classpath:jdbc.properties”)
用于加載配置文件
存在的屬性:- ignoreResourceNotFound: 當(dāng)資源文件找不到的時候是否會忽略改配置谆奥,一般用于可選項
- encoding : 資源文件使用什么編碼方式
環(huán)境切換
環(huán)境切換 | |
---|---|
@Profile | 通過設(shè)定Environment的ActiveProfiles來設(shè)定當(dāng)前context需要使用的配置環(huán)境眼坏。(類或方法上) |
@Conditional | Spring4中可以使用此注解定義條件話的bean,通過實(shí)現(xiàn)Condition接口酸些,并重寫matches方法宰译,從而決定該bean是否被實(shí)例化。(方法上) |
異步相關(guān)
異步相關(guān) | |
---|---|
@EnableAsync | 配置類中魄懂,通過此注解開啟對異步任務(wù)的支持沿侈,敘事性AsyncConfigurer接口(類上) |
@Async | 在實(shí)際執(zhí)行的bean方法使用該注解來申明其是一個異步任務(wù)(方法上或類上所有的方法都將異步,需要@EnableAsync開啟異步任務(wù)) |
定時任務(wù)相關(guān)
定時任務(wù)相關(guān) | |
---|---|
@EnableScheduling | 在配置類上使用逢渔,開啟計劃任務(wù)的支持(類上) |
@Scheduled | 來申明這是一個任務(wù)肋坚,包括cron,fixDelay,fixRate等類型(方法上,需先開啟計劃任務(wù)的支持) |
Enable注解說明
這些注解主要用來開啟對xxx的支持肃廓。
Enable注解說明 | |
---|---|
@EnableAspectJAutoProxy | 開啟對AspectJ自動代理的支持 |
@EnableAsync | 開啟異步方法的支持 |
@EnableScheduling | 開啟計劃任務(wù)的支持 |
@EnableWebMvc | 開啟Web MVC的配置支持 |
@EnableConfigurationProperties | 開啟對@ConfigurationProperties注解配置Bean的支持 |
@EnableJpaRepositories | 開啟對SpringData JPA Repository的支持 |
@EnableTransactionManagement | 開啟注解式事務(wù)的支持 |
@EnableCaching | 開啟注解式的緩存支持 |
測試相關(guān)注解
測試相關(guān)注解 | |
---|---|
@RunWith | 運(yùn)行器智厌,Spring中通常用于對JUnit的支持 @RunWith(SpringJUnit4ClassRunner.class) |
@ContextConfiguration | 用來加載配置ApplicationContext,其中classes屬性用來加載配置類 @ContextConfiguration(classes={TestConfig.class}) |
SpringMVC部分
SpringMVC部分 | |
---|---|
@EnableWebMvc | 在配置類中開啟Web MVC的配置支持盲赊,如一些ViewResolver或者M(jìn)essageConverter等铣鹏,若無此句,重寫WebMvcConfigurerAdapter方法(用于對SpringMVC的配置)哀蘑。 |
@Controller | 聲明該類為SpringMVC中的Controller |
@RequestMapping | 用于映射Web請求诚卸,包括訪問路徑和參數(shù)(類或方法上) |
@ResponseBody | 支持將返回值放在response內(nèi),而不是一個頁面绘迁,通常用戶返回json數(shù)據(jù)(返回值旁或方法上) |
@RequestBody | 允許request的參數(shù)在request體中合溺,而不是在直接連接在地址后面。(放在參數(shù)前) |
@PathVariable | 用于接收路徑參數(shù)缀台,比如@RequestMapping("/hello/{name}")申明的路徑棠赛,將注解放在參數(shù)中前,即可獲取該值,通常作為Restful的接口實(shí)現(xiàn)方法睛约。 |
@RestController | 該注解為一個組合注解鼎俘,相當(dāng)于@Controller和@ResponseBody的組合,注解在類上辩涝,意味著贸伐,該Controller的所有方法都默認(rèn)加上了@ResponseBody。 |
@ControllerAdvice | 通過該注解怔揩,我們可以將對于控制器的全局配置放置在同一個位置捉邢,注解了@Controller的類的方法可使用@ExceptionHandler、@InitBinder沧踏、@ModelAttribute注解到方法上歌逢, |
這對所有注解了 @RequestMapping的控制器內(nèi)的方法有效巾钉。 | |
@ExceptionHandler | 用于全局處理控制器里的異常 |
@InitBinder | 用來設(shè)置WebDataBinder翘狱,WebDataBinder用來自動綁定前臺請求參數(shù)到Model中。 |
@ModelAttribute | 本來的作用是綁定鍵值對到Model里砰苍,在@ControllerAdvice中是讓全局的@RequestMapping都能獲得在此處設(shè)置的鍵值對潦匈。 |
@CrossOrigin | 用于解決跨域問題,只需在接口上進(jìn)行聲明即可赚导,替代過慮器或攔截方式茬缩。 |
版權(quán)聲明:文章內(nèi)容總結(jié)于網(wǎng)絡(luò),如侵犯到原作者權(quán)益吼旧,請與我聯(lián)系刪除或授權(quán)事宜