Spring 声明式注解自动注入的三种方式

308 阅读2分钟

1、Autowired注解

1.1、介绍注解的作用

在 Bean 中直接在 属性 / setter 方法 / 构造函数 上标注 @Autowired 注解,IOC 容器会按照属性对应的类型,从容器中找对应类型的 Bean 赋值到对应的属性上,实现自动注入。

1.2、注解属性介绍

在这个注解中有一个属性required,如果是true,那么注入的时候容器必须找到,否则会报错,如果是false,如果在容器中没有找到则设置为null,默认为true

1.3、该注解dl的匹配模式

首先该注解是根据类型进行查找依赖的,其次会通过属性的名称作为BEAN的ID进行查找,如果你不想用默认的,可以配合@Qualifier进行bean的ID查找

1.4、如果注入的bean有多个一样的类型

可以只用List上面加一个Autowired注解,他会将所有的匹配的Bean类型,进行注入到这个List中

2、JSR250-@Resource

介绍 JSR250 规范之前,先简单了解下 JSR 。

JSR 全程 Java Specification Requests ,它定义了很多 Java 语言开发的规范,有专门的一个组织叫 JCP ( Java Community Process ) 来参与定制。 回到正题,@Resource 也是用来属性注入的注解,它与 @Autowired 的不同之处在于: @Autowired 是按照类型注入,@Resource 是直接按照属性名 / Bean的名称注入

是不是突然有点狂喜,这个  @Resource 注解相当于标注 @Autowired 和 @Qualifier 了!实际开发中,@Resource 注解也是用的很多的,可以根据情况来进行选择。

3、SR330-@Inject

介绍

JSR330 也提出了跟 @Autowired 一样的策略,它也是按照类型注入。不过想要用 JSR330 的规范,需要额外导入一个依赖:

    <!-- jsr330 --> 
    <dependency> 
    <groupId>javax.inject</groupId> 
    <artifactId>javax.inject</artifactId>
    <version>1</version> 
    </dependency>
    @Inject // 等同于@Autowired 
    @Named("admin") // 等同于@Qualifier