@SpringBootApplication spring启动类上的注解(实际是由三个注解组成:@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan)
@EnableAutoConfiguration 自动配置类
@SpringBootConfiguration spring配置类
@CompentScan 扫描注解
@Bean bean注解
@ConfigurationProperties 配置文件
@EnableConfigurationProperties 配置文件
@Controller 控制器注解
@Service 服务注解
@Repository 持久化注解
@ImportResource 将资源导入容器
@Autowired 自动注入 ,先按类型找 如果找到多个就报错;如果加了@Qualifier 会先按类型找,如果多个再按名称找
@Resource 先按名称找,找不到再按类型找
Autowired 和Resource的区别
@Autowired 是 Spring 提供的依赖注入注解,默认按照 类型(byType) 注入,如果存在多个 Bean,需要配合 @Qualifier 指定名称。
@Resource 是 JSR-250 规范中的注解,默认按照 名称(byName) 注入,如果找不到再按照类型匹配。
另外 @Autowired 支持 required=false,并且可以用于 构造器注入,而 @Resource 不支持
@Autowired 支持list map optional类型的注入,而resource不支持
@Autowired 是怎么实现依赖注入的?底层流程是什么?
1 | Spring启动 |
总结
Autowired 的底层实现依赖于AutowiredAnnotationBeanPostProcessor。
Spring 在启动时会注册这个 BeanPostProcessor,在 Bean 创建过程中进入 populateBean() 阶段时,会调用 postProcessProperties() 扫描 Bean 中的 @Autowired 字段或方法。
然后通过 BeanFactory.resolveDependency() 根据类型解析依赖,从 IoC 容器中找到对应 Bean,最后通过反射将 Bean 注入到目标对象中