目录
一、@Autowired 注解
1.1 介绍
1.2 作用
二、@Resource 注解
2.1 介绍
2.2 @Resource 自动注入顺序
三、@Autowired 和 @Resource区别
3.1 相同点:
3.2 不同点:
今天给大家分享Spring属性注入的注解@Autowired 和@Resource介,希望对大家能有所帮助!
一、@Autowired 注解
1.1 介绍
-
@Autowired注解默认按照类型容器中找到对应的组件:annotationContext.getBean(Person.class) 。
-
如果找到多个相同类型的组件,再根据属性的名称作为组件id去spring容器中找:annotationContext.getBean("person") 。
-
required:属性默认为true,表示自动注入的Bean必须能够找到,否则就会报null,设置为false,可以在Spring容器自动注入Bean找不到的话,返回null,不会报错。
-
@Autowired可以和@Qualifie注解使用,用来指定注入的组件id,而不是使用属性名。
-
@Autowired默认先按Type进行匹配,如果找到多个bean,则又会按照组件id方式进行匹配(需要@Qualifier("name")配合)。
1.2 作用
@Autowired表示被修饰的Java类需要注入对象,spring会自动扫描所有被@Autowired标注的类,然后根据在IOC容器中找到匹配的类进行自动注入。
二、@Resource 注解
2.1 介绍
@Resource 注解和@Autowired注解作用比较相似,也是实现组件的自动注入。它是JAVA2EE提供的注解,使用的时候需要导入javax.annotation.Resourc 。
@Resource默认按照组件id自动注入,如果按照默认组件id找不到bean时,再按照类型去匹配。示例:
public class UseInforDao {
@Resource(name ="person",type = Person.class)
private UserInfo userInfo;
}
2.2 @Resource 自动注入顺序
-
同时指定了组件id和type,则从Spring上下文中找到唯一匹配的bean进行注入,找不到则抛出异常。
-
指定了组件id,则从上下文中查找名称(id)匹配的bean进行注入,找不到则抛出异常。
-
指定了type,则从上下文中找到类型匹配的唯一bean进行注入,如果找不到或者找到多个,都会抛出异常。
-
既没有指定组件ide,又没有指定type,则自动按照组件id方式进行注入;找不到的话,则回退为一个原始类型进行匹配,如果匹配则自动注入。
三、@Autowired 和 @Resource区别
3.1 相同点:
-
两者都是实现Bean的注入功能
-
两者都可以写在属性字段或者setter方法上。两者如果都写在属性字段上,setter方法可以省略掉。
3.2 不同点:
-
@Autowired属于Spring注解,@Resource 油JAVA2EE提供,需要导入包javax.annotation.Resource。
-
@Autowired默认按Type注入,组件id的方式需要与@Qualifier("name")配合使用;@Resource同时支持Type和组件id方式注入,默认按组件id注入。
-
@Autowired只包含一个参数:required,标明是否开启自动注入,默认是true。而@Resource包含七个参数,最重要的两个参数是:name 和 type,用来指定注入的方式。
-
@Autowired可以作用在:构造器、方法、参数、成员变量和注解上,@Resource可以作用在:类、成员变量和方法上。
IT技术分享社区
个人博客网站:https://programmerblog.xyz