Spring学习笔记7_使用JSR 330标准注解(Using JSR 330 Standard Annotations)

文章参考来源:Spring Framework官方文档

从Spring 3.0开始,Spring提供了对JSR-330标准注解(依赖注入)的支持。这些注释的扫描方式与Spring注解扫描方式相同

@Configuration
@ComponentScan(basePackages = "org.example")
public class AppConfig  {
    // ...
}

要使用它们,需要将相关的jar包保存在类路径中。假设使用的是Maven,格式如下:

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

在JSR-330标准注解中,@Inject 和@Named可以实现Spring注解中@Autowired和@Qualifier的效果,且用法基本相同。

import javax.inject.Inject;
import javax.inject.Named;

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Inject
    public void setMovieFinder(@Named("main") MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...
}

对于Spring中的@Component,@javax.inject.Named 结合 javax.annotation.ManagedBean同样可以实现相同效果。

import javax.inject.Inject;
import javax.inject.Named;

@Named("movieListener")  // @ManagedBean("movieListener") could be used as well
//@Named  不指定名称也是可以使用的
public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Inject
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...
}

但是和@Component相比,JSR-330 的@Named 和JSR-250的@ManagedBean不可以实现再组合。(比如Spring的@Service组合成分包括@Component)

JSR-330注解的限制

(和Spring相比)

Springjavax.inject.*javax.inject.*的限制
@Autowired@Inject@Inject没有required属性,可以使用 Java 8’s Optional代替
@Component@Named / @ManagedBeanJSR-330没有提供可组合的模型,仅是一种识别已命名组件的方法
@Scope(“singleton”)@SingletonJSR-330默认作用域类似于Spring的原型(prototype)。然而,为了使它与Spring的一般默认值保持一致,在Spring容器中声明的JSR-330 bean在默认情况下是一个单例对象(singleton)。为了使用除singleton之外的作用域,您应该使用Spring的@Scope注释。javax.inject还提供了一个@Scope注解。尽管如此,这个注解仅用于创建您自己的注释。
@Qualifier@Qualifier / @Namedjavax.inject.Qualifier只是一个用于构建自定义限定符的元注解。具体的字符串限定符(比如带有值的Spring的@Qualifier)可以通过javax.inject.Named关联
@Value-没有类似的
@Required-没有类似的
@Lazy-没有类似的
ObjectFactoryProviderjavax.inject.Provider是Spring中ObjectFactory的直接替代方案,只是使用了更短的get()方法名。它还可以与Spring的@Autowired或无注解的构造函数和setter方法结合使用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值