@Autowired和@Resouce的区别:
1:Autowired是Spring自带的注解,默认采用按类型加载bean。
2:Resource是JDK1.6的注解,默认采用按名称加载bean。
3:如果遇见两个bean有相同的类型,@Autowired应该通过@Qualifier(通过名称加载)注解协作注入:
@Autowired
@Qualifier(value="comment1")
private Comment firstComment;
分析Autowired底层加载方式:
当 Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有@Autowired 注解时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。 源码分析如下:
1:通过org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor可以实现依赖自动注入。通过这个类来处理@Autowired和@Value这俩Spring注解。它也可以管理JSR-303(JDK)的@Inject注解(如果可用的话)。在AutowiredAnnotationBeanPostProcessor构造函数中定义要处理的注解:
反射生成Bean对象。
2:通过buildAutowiringMetadata(final Class<?> clazz)解析等待 自动注入 类的所有属性。
3: 通过分析 所有字段和方法 并初始化 org.springframework.beans.factory.annotation.InjectionMetadata,初始化对象。