@Resource 或者 @Autowire注解放在field和setter方法上的区别

@Resource 或者 @Autowire

一、应用放在字段上则注入规则是:
1.先使用字段名字匹配到Bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败
2.如果字段名字没有匹配到Bean则Spring会尝试采用字段类型匹配,如果找到一个Bean则注入,如果字段类型是接口则又可能会匹配到多个类型,则会抛出匹配到多个bean的异常,注入失败
二、应用到setter上
1.先使用属性名字(参数类型属性 eg:setName 属性名字就是:name)匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败
2.如果属性名字没有匹配到bean,则Spring会尝试采用属性参数类型匹配,如果找到Bean则注入,如果属性参数类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个bean的异常,注入失败

两者的功能区别除了找的名字不同(其实一样)之外,最大的差别是应用在字段上时,注入时会进行寻找setter方法去注入,而setter方法则不需要找在去找setter方法。这样就提高了效率

但是为了让代码有可看性和可塑性大多数还是要将注解放在字段上

如果将setter方法的修饰符变为private私有的。这个时候如果你把注解放在属性上,这个时候spring框架单单通过属性就不能找到setter方法。
但是把注解放在私有的setter方法上,这个时候sping底层其实是用了反射机制,反射机制可以无视java的规则。可以反射调用私有的方法。
当然我们也不会将setter方法变为私有的…

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值