@Autowired 是什么

4 阅读2分钟

@Autowired 是 Spring 框架中的一个注解,用于实现依赖注入(Dependency Injection, DI)。它可以标注在类的成员变量、方法以及构造函数上,让 Spring 自动完成 Bean 的装配工作。

使用方法

  • 成员变量注入:直接在类的成员变量上使用 @Autowired 注解,Spring 容器会自动为这些变量找到与其类型匹配的 Bean 实例,并进行注入。

public class MyClass {

@Autowired

private MyService myService;

}

复制

  • 构造函数注入:将 @Autowired 应用于类的构造函数上,Spring 容器会自动解析构造函数的参数类型,并为这些参数找到与其类型匹配的 Bean 实例,然后注入到构造函数中。

public class MyClass {

private MyService myService;

@Autowired

public MyClass(MyService myService) {

this.myService = myService;

}

}

复制

  • 方法注入:将 @Autowired 应用于类的方法上,当类实例化时,Spring 容器会自动解析这些方法的参数类型,并为这些参数找到与其类型匹配的 Bean 实例,然后调用这些方法并注入参数。

public class MyClass {

private MyService myService;

@Autowired

public void setMyService(MyService myService) {

this.myService = myService;

}

}

复制

解决 Bean 冲突

当容器中存在多个相同类型的 Bean 时,可以使用 @Qualifier 注解来指定要注入的 Bean。

public class FooService {

@Autowired

@Qualifier("fooFormatter")

private Formatter formatter;

}

复制

处理可选依赖

如果某个依赖在 Spring 容器中找不到匹配的 Bean 实例,可以将 @Autowired 注解的 required 属性设置为 false,这样在找不到匹配的 Bean 时,框架将不会抛出异常。

public class MyClass {

@Autowired(required = false)

private MyService myService;

}

复制

工作原理

在 Spring 中,AutowiredAnnotationBeanPostProcessor (AABP)  负责处理带有 @Autowired 注解的成员变量和方法。当 Spring 容器实例化一个 Bean 时,会调用 AABP 的 postProcessProperties 方法来实际注入 @Autowired 注解的成员变量和方法。

通过以上方式,@Autowired 注解可以方便地实现依赖注入,简化了代码的编写和维护。