服务器之家

服务器之家 > 正文

Spring5使用JSR 330标准注解的方法

时间:2021-12-15 11:03     来源/作者:flydean程序那些事

之前的文章我们有讲过,从Spring3.0之后,除了Spring自带的注解,我们也可以使用JSR330的标准注解。不过需要加入maven依赖如下:

?
1
2
3
4
5
6
7
<dependencies>
<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>
</dependencies>

下面是标准注解和Spring注解的区别:

 

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注解。但是这个注解仅用来创建你自己的注解。
@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:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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的例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
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注解来为注入的参数限定名字:

?
1
2
3
4
@Inject
public void setMovieFinderNamed(@Named("main") MovieFinder movieFinder) {
    this.movieFinder = movieFinder;
}

与@Autowired一样,@Inject也可以与java.util.Optional或@Nullable一起使用。下面是例子:

?
1
2
3
4
5
6
7
@Inject
public void setMovieFinder(Optional<MovieFinder> movieFinder) {
}
 
@Inject
public void setMovieFinder(@Nullable MovieFinder movieFinder) {
}

@Named 和 @ManagedBean

除了使用@Component,你也可以使用@javax.inject.Named 或者 javax.annotation.ManagedBean,如下:

?
1
2
3
4
5
6
7
8
9
10
@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标准注解的方法的文章就介绍到这了,更多相关Spring5 JSR 330注解内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/superfjj/article/details/99224487

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部