共同点
两个注解的作用一样,都是做bean的注入,在接口只有一个实现类的时候,两个注解能够交替应用。
两者都能够写在字段和setter办法上,两者如果都写在字段上,那么就不须要再写setter办法
不同点
@Autowired
@Autowired为Spring提供的注解,须要导入包org.springframework.beans.factory.annotation.Autowired;
只依照byType注入。
@Autowired注解是依照类型(byType)拆卸依赖对象,默认状况下它要求依赖对象必须存在,如果允 许null值,能够设置它的required属性为false。如果咱们想应用依照名称(byName)来拆卸,能够联合@Qualififier注解一起应用。
@Resource
@Resource默认依照ByName主动注入,由J2EE提供,须要导入javax.annotation.Resource。
@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的 名字,而type属性则解析为bean的类型。所以,如果应用name属性,则应用byName的主动注入策 略,而应用type属性时则应用byType主动注入策略。如果既不制订name也不制订type属性,这时将通 过反射机制应用byName主动注入策略。
注:最好是将@Resource放在setter办法上,因为这样更合乎面向对象的思维,通过set、get去操作属 性,而不是间接去操作属性。
其实@Resource并不是spring的注解,它的包 是javax.annotation.Resource,须要导入,然而Spring反对该注解的注入。
@Resource拆卸程序:
①如果同时指定了name和type,则从Spring上下文中找到惟一匹配的bean进行拆卸,找不到则抛出异 常。
②如果指定了name,则从上下文中查找名称(id)匹配的bean进行拆卸,找不到则抛出异样。
③如果指定了type,则从上下文中找到相似匹配的惟一bean进行拆卸,找不到或是找到多个,都会抛 出异样。
④如果既没有指定name,又没有指定type,则主动依照byName形式进行拆卸;如果没有匹配,则回 退为一个原始类型进行匹配,如果匹配则主动拆卸。
@Resource的作用相当于@Autowired,只不过@Autowired依照byType主动注入。