Spring之Autowired详解

849 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情

Spring的DI机制,将原本属于程序中自己创建对象的工作交给了Spring框架来完成,为项目的开发提供了很大的便捷性,下面将详细介绍Spring中提供的一个用于自动注入的常用注解Autowired。

@Autowired用法介绍

1.当容器中只有一个指定类型的Bean时,会直接按照类型完成Bean的自动装配.

2.当容器中同时存在着多个类型相同的Bean时,使用@Autowired会默认再去按照bean的名称进行装配。

3.当容器中存在着多个类型相同的Bean时,会再次优先按照名称进行装配,也可以通过@Qualifier指定需要装配的Bean的名称完成Bean的自动装配

4.当容器中没有指定类型的Bean时,在自动装配的时候默认会抛出异常:异常信息大概是NosuchBeanDefinitionException异常

5.当容器中存在着多个类型和名称相同的Bean时,可以通过@Primary来指定优先装配。

@Autowired的使用范围

先看看@Autowired注解的定义:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
    boolean required() default true;
}

可以看出@Autowired注解的作用范围右五种 CONSTRUCTOR(构造器)、METHOD(方法)、PARAMETER(参数)、FIELD(成员变量)、ANNOTATION_TYPE(注解)。

该注解我们平常使用最多的地方可能是在成员变量上。

  @Autowired
    private SysAuditInfoMapper sysAuditInfoMapper;

在构造器上使用Autowired注解:

 @Autowired
    public SysAuditInfoService(SysAuditInfo sysAuditInfo) {
        this.sysAuditInfo = sysAuditInfo;
      
    }
​

在普通方法上加Autowired注解:

​
 
    @Autowired
    public void test(IUser user) {
       user.say();
    }
​

可以在构造器的入参上加Autowired注解:

​
    public SysAuditInfoService( @Autowired SysAuditInfo sysAuditInfo) {
        this.sysAuditInfo = sysAuditInfo;
      
    }

@Autowired和@Resouce的区别

@Resource和@Autowired都可以完成自动装配,但是他们之间也是有区别的,具体区别如下

  • @Autowired默认按byType自动装配,@Resource默认byName自动装配。
  • @Autowired只包含一个参数:required,而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。
  • @Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。
  • @Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。

好了,本文就给大家介绍到这里,Spring自动装配中的@Autowired注解介绍完毕!感觉有帮助的,留下个赞或评论再走吧!谢啦~ 💐