欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring5使用JSR 330標(biāo)準(zhǔn)注解的方法

 更新時(shí)間:2021年09月02日 11:30:44   作者:flydean程序那些事  
從Spring3.0之后,除了Spring自帶的注解,我們也可以使用JSR330的標(biāo)準(zhǔn)注解,本文主要介紹了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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論