温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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