@Autowried

默认是按照类型进行装配注入,默认情况下,它要求依赖对象必须存在,如果允许 null 值,可以设置它 required 为false。

如果我们想要按名称进行装配的话,可以添加一个 @Qualifier 注解解决。

@Qualifier(\"quartzProperties\")
@Autowired
private Properties p;

 注:@Autowried 是 Spring 提供的,

注:@Resource 和 @Autowried 都可以加在字段的 setter 方法上。

@Resource

默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来注入。

它有两个属性是比较重要的:

  1. name: Spring 将 name 的属性值解析为 bean 的名称, 使用 byName 的自动注入策略
  2. type: Spring 将 type的属性值解析为 bean 的类型,使用 byType 的自动注入策略

如果既不指定 name 属性又不指定 type 属性,Spring这时通过反射机制使用 byName 自动注入策略

@Resource 的装配顺序

  1. 如果同时指定了 name 属性和 type 属性,那么 Spring 将从容器中找唯一匹配的 bean 进行装配,找不到则抛出异常
  2. 如果指定了 name 属性值,则从容器中查找名称匹配的 bean 进行装配,找不到则抛出异常
  3. 如果指定了 type 属性值,则从容器中查找类型匹配的唯一的 bean 进行装配,找不到或者找到多个都会抛出异常
  4. 如果都不指定,则会自动按照 byName 方式进行装配, 如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配

注:@Resource 注解是 J2EE 提供的,

 

收藏 打印