中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring5如何使用JSR 330標準注解

發布時間:2021-09-02 13:44:25 來源:億速云 閱讀:142 作者:小新 欄目:開發技術

小編給大家分享一下Spring5如何使用JSR 330標準注解,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

之前的文章我們有講過,從Spring3.0之后,除了Spring自帶的注解,我們也可以使用JSR330的標準注解。不過需要加入maven依賴如下:

<dependencies>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>
    </dependencies>

下面是標準注解和Spring注解的區別:

Springjavax.inject.*javax.inject限制/描述
@Autowired@Inject@Inject沒有required屬性,可以使用Java8的Optional代替
@Component@Named / @ManagedBeanJSR-330沒有提供組合模式,只有一種方式來標記命名組件
@Scope(“singleton”)@SingletonJSR-330默認范圍類似Spring的prototype,但是為了和Spring的默認值保持一致,在Spring中定義的JSR-330 bean默認是singleton。如果要使用其他的作用范圍,那么需要使用Spring的@Scope注解。javax.inject也提供了一個@Scope注解。但是這個注解僅用來創建你自己的注解。
@Qualifier@Qualifier / @Namedjavax.inject.Qualifier只是一個用來構建自定義Qualifier的元注解。具體的字符串限定符(如帶value的Spring的@Qualifier)可以通過javax.inject.Named關聯。
@Value-沒有相同功能
@Required-沒有相同功能
@Lazy-沒有相同功能
ObjectFactoryProviderjavax.inject.Provider是Spring的ObjectFactory的直接替代品,它只使用了較短的get()方法名。它還可以與Spring的@Autowired結合使用,或者與無注解的構造函數和setter方法結合使用。

下面我們分別來介紹。

@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一樣,你可以在字段級、方法級和構造函數參數級使用@Inject。此外,可以將注入點聲明為Provider,允許通過Provider.get() 調用按需訪問較短作用域的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注解來為注入的參數限定名字:

@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;
    }
}

以上是“Spring5如何使用JSR 330標準注解”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

松原市| 岗巴县| 泗洪县| 杂多县| 东乌珠穆沁旗| 凌源市| 富阳市| 井冈山市| 昌平区| 宽甸| 板桥市| 勐海县| 堆龙德庆县| 武威市| 治县。| 金平| 英山县| 西城区| 麻城市| 天祝| 惠来县| 定远县| 福泉市| 红桥区| 瑞昌市| 巴中市| 措美县| 秦安县| 天水市| 临武县| 茂名市| 南召县| 云梦县| 德化县| 青田县| 延吉市| 巴彦县| 阿合奇县| 中江县| 桐柏县| 喀喇沁旗|