原来@Autowired和@Resource区别这么简单!

面试官问:讲讲@Autowired和@Resource区别?

新手回答(本人):

呃 ,@Resource和@Autowired的区别,我认为是在他们的一个注入的方式上。@Resource它是根据name来去进行注入的,@Autowired是根据类型(type)来进行注入的。

大佬回答:

这两个注解的作用都是spring生态里面去实现Bean的依赖注入。下面我再分别说一下@Autowired和@Resource这两个注解的一个作用。首先 @Autowired默认是根据类型来实现并的依赖注入,

@Autowired的注解里面呢有一个require的属性,它的默认值是true表示强制要求Bean实例的一个注入。在应用启动的时候,如果IOC容器里面不存在对应类型的Bean,那么启动的时候就会报错,但如果我们不希望去实现自动注入,可以把这个属性设置为false。其次,如果在spring Ioc容器里面存在多个相同类型的Bean实例,由于@Autowired的注解,呢它是根据类型来注入Bean的实例的,所以spring容器启动时候会提示一个错误,就是原本只能助入一个单实例Bean,但是在IOC容器里面会有多个导致注入失败,当然针对这个问题啊我们可以使用@Primary或者@Qualifier这两个注解来解决。

@Primary当存在多个相同类型的Bean的时候,优先使用声明的@Primary注解的一个Bean,而@Qualifier的注解呢类似于条件筛选,它可以根据Bean的名字去找到需要装配的目标Bean。

接下来我再解释一下@Resource这样一个注解,@Resource呢是jdk里面提供的注解,只是spring在实现上提供了这种注解功能的一个支持。不同点在于@Resource可以支持byName和byType两种的方式,如果使用name,spring会根据Bean的名字去进行依赖注入,如果使用type,spring会根据类型来实现依赖注入。

假设啊两个属性都没有配置的情况下,它会先根据定义的属性名字去匹配,如果没有匹配成功,那么再根据类型来匹配,如果两个都没有匹配到的话呢就会报错。

最后我再总结一下@Autowired的注解呢是根据类型来匹配的,而@Resource这个注解可以根据name或者type来匹配,默认是name匹配。第二个@Autowired的注解呢是spring里面定义的注解,而@Resource注解的是JSR 250规范里面定义的注解,只是spring对JSR 250规范规范提供的支持而已。第三个@Autowired的注解如果需要name匹配,就需要配合@Primary或者@Qualifier注解来实现,以上就是我对这个问题的一个理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值