Spring5使用JSR 330標準注解的方法
之前的文章我們有講過,從Spring3.0之后,除了Spring自帶的注解,我們也可以使用JSR330的標準注解。不過需要加入maven依賴如下:
<dependencies>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
</dependencies>
下面是標準注解和Spring注解的區(qū)別:
| Spring | javax.inject.* | javax.inject限制/描述 |
|---|---|---|
| @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注解。但是這個注解僅用來創(chuàng)建你自己的注解。 |
| @Qualifier | @Qualifier / @Named | javax.inject.Qualifier只是一個用來構(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一樣,你可以在字段級、方法級和構(gòu)造函數(shù)參數(shù)級使用@Inject。此外,可以將注入點聲明為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標準注解的方法的文章就介紹到這了,更多相關(guān)Spring5 JSR 330注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java設(shè)計模式單例模式(Singleton)用法解析
這篇文章主要介紹了Java設(shè)計模式單例模式(Singleton)用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11
關(guān)于struts2中Action名字的大小寫問題淺談
這篇文章主要給大家介紹了關(guān)于struts2中Action名字大小寫問題的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。2017-06-06

