介绍
@Autowired和@Resource都是做bean的注入时使用。@Autowired和@Resource都可以作为注入属性的修饰,在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换,不影响使用。
区别
对比项 | @Autowired | @Resource |
注解来源 | Spring提供的 | J2EE提供的 |
装配默认类型 | 默认按类型装配,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。如果想使用名称装配可以结合@Qualifier注解进行使用。 | 默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找。如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。 |
装配顺序 | @Autowird默认的注入方式为byType,也就是根据类型匹配,当有多个实现类时,则通过byName注入加以区分,或者可以通过配合@Qualifier注解来显式指定name值,指明要使用哪个具体的实现类 | ①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。 ②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。 ③如果指定了type,则从上下文中查找类型匹配的bean进行装配,找不到或是找到多个,都会抛出异常。 ④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配,默认以变量名为Bean的id |
作用范围 | 字段,setter方法,构造器 | 字段,setter方法 |
原文链接:https://blog.csdn.net/weixin_58812667/article/details/128419653