@Autowired的源码
时间: 2023-10-07 10:08:31 浏览: 104
你所不知道的Spring的@Autowired实现细节分析
`@Autowired` 是 Spring 框架中的一个注解,用于自动注入 Bean 对象。其源码主要在 `org.springframework.beans.factory.annotation` 包下:
```java
@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
/**
* Declares whether the annotated dependency is required.
* <p>Defaults to {@code true}.
*/
boolean required() default true;
/**
* Declares whether the annotated dependency should be injected into
* 'plain' properties (setter methods, fields, and constructor
* parameters that do not accept a Qualifier argument).
* <p>Defaults to {@code true}.
* @since 4.3.1
*/
boolean autowire() default true;
/**
* The configuration parameter name to look up in the containing
* {@link org.springframework.core.env.Environment Environment}.
* @since 4.3.2
*/
String value() default "";
}
```
`@Autowired` 注解有以下三个属性:
1. `required`:是否必须要注入,如果设置为 `true`,但是找不到对应的 Bean,会抛出异常;如果设置为 `false`,则不会抛出异常,但是需要注意空指针问题。
2. `autowire`:是否自动装配。如果设置为 `true`,则会自动装配;如果设置为 `false`,则需要手动指定要注入的 Bean。
3. `value`:用于指定要注入的 Bean 的名称。如果不指定,则默认按照类型进行注入。
在 Spring 容器启动时,会扫描到所有带有 `@Autowired` 注解的类,并自动注入对应的 Bean 对象。具体实现是通过 `AutowiredAnnotationBeanPostProcessor` 类和 `AutowiredAnnotationBeanPostProcessor#postProcessPropertyValues()` 方法来实现的。
阅读全文