當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring5参考指南:JSR 330标准注解
生活随笔
收集整理的這篇文章主要介紹了
Spring5参考指南:JSR 330标准注解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- @Inject 和 @Named
- @Named 和 @ManagedBean
之前的文章我們有講過,從Spring3.0之后,除了Spring自帶的注解,我們也可以使用JSR330的標準注解。不過需要加入maven依賴如下: <dependencies><dependency><groupId>javax.inject</groupId><artifactId>javax.inject</artifactId><version>1</version></dependency></dependencies>
下面是標準注解和Spring注解的區別:
| @Autowired | @Inject | @Inject沒有required屬性,可以使用Java8的Optional代替 |
| @Component | @Named / @ManagedBean | JSR-330沒有提供組合模式,只有一種方式來標記命名組件 |
| @Scope(“singleton”) | @Singleton | JSR-330默認范圍類似Spring的prototype,但是為了和Spring的默認值保持一致,在Spring中定義的JSR-330 bean默認是singleton。如果要使用其他的作用范圍,那么需要使用Spring的@Scope注解。javax.inject也提供了一個@Scope注解。但是這個注解僅用來創建你自己的注解。 |
| @Qualifier | @Qualifier / @Named | javax.inject.Qualifier只是一個用來構建自定義Qualifier的元注解。具體的字符串限定符(如帶value的Spring的@Qualifier)可以通過javax.inject.Named關聯。 |
| @Value | - | 沒有相同功能 |
| @Required | - | 沒有相同功能 |
| @Lazy | - | 沒有相同功能 |
| ObjectFactory | Provider | javax.inject.Provider是Spring的ObjectFactory的直接替代品,它只使用了較短的get()方法名。它還可以與Spring的@Autowired結合使用,或者與無注解的構造函數和setter方法結合使用。 |
下面我們分別來介紹。
@Inject 和 @Named
@Inject可以用來替換@Autowired:
public class SimpleMovieLister {private MovieFinder movieFinder;@Injectpublic void setMovieFinder(MovieFinder movieFinder) {this.movieFinder = movieFinder;}public void listMovies() {this.movieFinder.findMovies();} }與@Autowired一樣,你可以在字段級、方法級和構造函數參數級使用@Inject。此外,可以將注入點聲明為Provider,允許通過Provider.get() 調用按需訪問較短作用域的bean或延遲訪問其他bean。下面是Provider的例子:
public class SimpleMovieProviderLister {private Provider<MovieFinder> movieFinder;@Injectpublic void setMovieFinder(Provider<MovieFinder> movieFinder) {this.movieFinder = movieFinder;}public void listMovies() {this.movieFinder.get().findMovies();} }可以使用@Named注解來為注入的參數限定名字:
@Injectpublic void setMovieFinderNamed(@Named("main") MovieFinder movieFinder) {this.movieFinder = movieFinder;}與@Autowired一樣,@Inject也可以與java.util.Optional或@Nullable一起使用。下面是例子:
@Injectpublic void setMovieFinder(Optional<MovieFinder> movieFinder) {}@Injectpublic 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;@Injectpublic void setMovieFinder(MovieFinder movieFinder) {this.movieFinder = movieFinder;}}本節的例子可以參考jsr330
更多精彩內容且看:
- 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
- Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
- Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
- java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程
更多教程請參考flydean的博客
總結
以上是生活随笔為你收集整理的Spring5参考指南:JSR 330标准注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring5参考指南:组件扫描
- 下一篇: Spring5参考指南:Environm