Java依赖注入相关注解简述

Java开发中常用的依赖注入相关的注解主要包含有以下这些(已注明原始定义位置):

JSR-250标准注解

  • @Resource(Spring 支持)
  • @PostConstruct、@PreDestroy(Spring 支持)


JSR-330 (javax.inject)

  • @Inject(Spring 支持)
  • @Qualifer(Spring 支持)
  • @Named(Spring 支持)
  • @Scope, @Singleton(Spring 支持)


Spring Framework

  • @Autowired
  • @Required
  • @Qualifier
  • @Component、@Service、@Controller、@Repository

    

    注解@Resource的作用相当于Spring中的@Autowired,区别在于@Autowired按byType自动注入,而@Resource默认按 byName自动注入。

    Spring中的@Autowired可以使用@Inject代替,Maven依赖如下:

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

    @Resource与@Autowired、@Inject的详细区别:

        -- @Autowired、@Inject 注解

            默认autowired by type,可以通过@Qualifier 显式指定 autowired by qualifier name(集合类时有些特殊)。如果 autowired by type 失败(找不到或者找到多个实现),则退化为autowired by field name。

        -- @Resource注解

            默认 autowired by field name,如果 autowired by field name失败,会退化为 autowired by type,可以 通过@Qualifier 显式指定 autowired by qualifier name,如果 autowired by qualifier name失败,会退化为 autowired by field name。但是这时候如果 autowired by field name失败,就不会再退化为autowired by type了。

    @Required注解

        适用于bean属性的setter方法。

    @Component、@Service、@Controller、@Repository

        用于声明bean组件,其中@Component是其余几个注解的原型

    @Named

        即可用作类似@Component,也可以用作类似@Qualifier注解的作用。

    当使用标准注释时,重要的是要知道一些重要的特性是不可用的,具体情况见下表:Spring Framework 注解 vs JSR-330标准注解(来源:-- Spring Framework 5.06官方文档)。

Java依赖注入相关注解简述

(-- Spring Framework 5.06)