Spring5使用JSR 330標(biāo)準(zhǔn)注解的方法
之前的文章我們有講過,從Spring3.0之后,除了Spring自帶的注解,我們也可以使用JSR330的標(biāo)準(zhǔn)注解。不過需要加入maven依賴如下:
<dependencies> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> </dependencies>
下面是標(biāo)準(zhǔn)注解和Spring注解的區(qū)別:
Spring | javax.inject.* | javax.inject限制/描述 |
---|---|---|
@Autowired | @Inject | @Inject沒有required屬性,可以使用Java8的Optional代替 |
@Component | @Named / @ManagedBean | JSR-330沒有提供組合模式,只有一種方式來標(biāo)記命名組件 |
@Scope(“singleton”) | @Singleton | JSR-330默認(rèn)范圍類似Spring的prototype,但是為了和Spring的默認(rèn)值保持一致,在Spring中定義的JSR-330 bean默認(rèn)是singleton。如果要使用其他的作用范圍,那么需要使用Spring的@Scope注解。javax.inject也提供了一個(gè)@Scope注解。但是這個(gè)注解僅用來創(chuàng)建你自己的注解。 |
@Qualifier | @Qualifier / @Named | javax.inject.Qualifier只是一個(gè)用來構(gòu)建自定義Qualifier的元注解。具體的字符串限定符(如帶value的Spring的@Qualifier)可以通過javax.inject.Named關(guān)聯(lián)。 |
@Value | - | 沒有相同功能 |
@Required | - | 沒有相同功能 |
@Lazy | - | 沒有相同功能 |
ObjectFactory | Provider | javax.inject.Provider是Spring的ObjectFactory的直接替代品,它只使用了較短的get()方法名。它還可以與Spring的@Autowired結(jié)合使用,或者與無注解的構(gòu)造函數(shù)和setter方法結(jié)合使用。 |
下面我們分別來介紹。
@Inject 和 @Named
@Inject可以用來替換@Autowired:
public class SimpleMovieLister { private MovieFinder movieFinder; @Inject public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } public void listMovies() { this.movieFinder.findMovies(); } }
與@Autowired一樣,你可以在字段級(jí)、方法級(jí)和構(gòu)造函數(shù)參數(shù)級(jí)使用@Inject。此外,可以將注入點(diǎn)聲明為Provider,允許通過Provider.get() 調(diào)用按需訪問較短作用域的bean或延遲訪問其他bean。下面是Provider的例子:
public class SimpleMovieProviderLister { private Provider<MovieFinder> movieFinder; @Inject public void setMovieFinder(Provider<MovieFinder> movieFinder) { this.movieFinder = movieFinder; } public void listMovies() { this.movieFinder.get().findMovies(); } }
可以使用@Named注解來為注入的參數(shù)限定名字:
@Inject public void setMovieFinderNamed(@Named("main") MovieFinder movieFinder) { this.movieFinder = movieFinder; }
與@Autowired一樣,@Inject也可以與java.util.Optional或@Nullable一起使用。下面是例子:
@Inject public void setMovieFinder(Optional<MovieFinder> movieFinder) { } @Inject public void setMovieFinder(@Nullable MovieFinder movieFinder) { }
@Named 和 @ManagedBean
除了使用@Component,你也可以使用@javax.inject.Named 或者 javax.annotation.ManagedBean,如下:
@Named("movieListener") // @ManagedBean("movieListener") could be used as well public class SimpleMovieNamedLister { private MovieFinder movieFinder; @Inject public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } }
到此這篇關(guān)于Spring5使用JSR 330標(biāo)準(zhǔn)注解的方法的文章就介紹到這了,更多相關(guān)Spring5 JSR 330注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot后端進(jìn)行數(shù)據(jù)校驗(yàn)JSR303的使用詳解
- Spring Boot使用JSR-380進(jìn)行校驗(yàn)的示例
- Spring中使用JSR303請求約束判空的實(shí)現(xiàn)
- SpringBoot使用jsr303校驗(yàn)的實(shí)現(xiàn)
- SpringBoot結(jié)合JSR303對(duì)前端數(shù)據(jù)進(jìn)行校驗(yàn)的示例代碼
- Spring Boot利用JSR303實(shí)現(xiàn)參數(shù)驗(yàn)證的方法實(shí)例
- Springboot集成JSR303參數(shù)校驗(yàn)的方法實(shí)現(xiàn)
相關(guān)文章
Springboot整合Swagger2后訪問swagger-ui.html 404報(bào)錯(cuò)問題解決方案
這篇文章主要介紹了Springboot整合Swagger2后訪問swagger-ui.html 404報(bào)錯(cuò),本文給大家分享兩種解決方案,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06Java中Vector、ArrayList、LinkedList的關(guān)系詳細(xì)解析
這篇文章主要介紹了Java中Vector、ArrayList、LinkedList的關(guān)系詳細(xì)解析,Vector和ArrayList底層均為Object數(shù)組,LinkedList底層是Node節(jié)點(diǎn),Vector是線程安全(底層方法均添加synchronized),ArrayList、LinkedList是線程不安全(無鎖),需要的朋友可以參考下2023-11-11一次因Java應(yīng)用造成CPU過高的排查實(shí)踐過程
一個(gè)應(yīng)用占用CPU很高,除了確實(shí)是計(jì)算密集型應(yīng)用之外,通常原因都是出現(xiàn)了死循環(huán)。下面這篇文章主要給大家介紹了一次因Java應(yīng)用造成CPU過高的排查實(shí)踐過程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-11-11springboot使用線程池(ThreadPoolTaskExecutor)示例
大家好,本篇文章主要講的是springboot使用線程池(ThreadPoolTaskExecutor)示例,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12SpringBoot深入理解之內(nèi)置web容器及配置的總結(jié)
今天小編就為大家分享一篇關(guān)于SpringBoot深入理解之內(nèi)置web容器及配置的總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03application.yml和bootstrap.yml不生效的3種解決方案
SpringBoot默認(rèn)支持?properties(.properties) 和 YAML(.yml .yaml ) 配置文件,本文主要介紹了application.yml和bootstrap.yml不生效的3種解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03Java基礎(chǔ)之多線程方法狀態(tài)和創(chuàng)建方法
Java中可以通過Thread類和Runnable接口來創(chuàng)建多個(gè)線程,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之多線程方法狀態(tài)和創(chuàng)建方法的相關(guān)資料,需要的朋友可以參考下2021-09-09springboot?使用websocket技術(shù)主動(dòng)給前端發(fā)送消息的實(shí)現(xiàn)
這篇文章主要介紹了springboot?使用websocket技術(shù)主動(dòng)給前端發(fā)送消息的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12