Spring 知识 -- 注解 -- @Resource 和 @Autowired
本文最后更新于:4 个月前
-
⚡相同点:
-
都是bean注入时使用
-
二者都可以写在字段上用来消除Setter和Getter方法
-
也可以写在Setter方法上
-
-
⚡不同点:
-
⚡包
@Resource 是属于Java EE的,在Javax包下
@Autowired 是属于Spring boot的
-
⚡自动装配的类型-
@Resource
@Resource 默认按照byName注入,但也可以用byType注入
spring将其注解的name属性解析为bean的名字,而type属性解析为bean的类型。
-
若同时指定了name和type属性,则从spring上下文中找到唯一的匹配的bean进行装配,找不到则抛出异常。
-
如果指定了name,则从上下文中查找名称(id)匹配的bean,找不到同上。
-
如果指定了type,则从上下文中查找类似匹配的bean,找不到或者找到多个都会抛出异常。
-
如果既不指定name,也不指定type,这时将通过反射机制使用默认的byName,没有匹配则退为一个原始类型进行匹配。
-
-
⚡自动装配的类型-
@Autowired
默认通过byType自动注入,如果 byType 找不到或者找到了多个,则通过属性的 byName 注入,如果 byName 也找不到,则报错。
默认情况下它要求依赖的对象必须存在,如果允许 null,则可以将它的 required 属性设置为 false。
如果想按照名字来自动装配,则需结合
@Qulifier
注解使用:@Autowired @Qulifier("userDao") private UserDao userDao;
-
个人感觉用Autowired会更整齐,而且也方便。
本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 。转载请注明出处!