@Autowired源码
时间: 2023-10-07 22:08:28 浏览: 92
@Autowired 注解是在 Spring 框架中实现自动注入的关键,它的实现原理主要是通过 BeanPostProcessor 接口实现的。当 Spring 容器创建 Bean 的过程中,BeanPostProcessor 会对 Bean 进行处理,自动注入依赖关系。
具体实现过程如下:
1. 在容器启动时,Spring 会扫描所有被 @Component、@Service、@Repository、@Controller 等注解标记的类,并将它们创建成 Bean,并将其添加到容器中。
2. 当容器创建 Bean 的过程中,会调用 BeanPostProcessor 的 postProcessBeforeInitialization 方法,在这个方法中会检查 Bean 中是否有被 @Autowired 注解标记的属性或方法。
3. 如果发现了被 @Autowired 标记的属性或方法,会使用反射获取属性或方法对应的类型,然后在容器中查找该类型对应的 Bean。
4. 如果查找到了对应的 Bean,则会将它注入到属性或方法中。
5. 如果没有查找到对应的 Bean,则会抛出异常。
下面是 @Autowired 注解的源代码:
```
@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
boolean required() default true;
}
```
从源代码中可以看出,@Autowired 注解只是一个标记注解,它没有任何实际的属性和方法。实际的注入过程是由 Spring 容器在处理 Bean 的过程中完成的。
阅读全文
相关推荐


















