Spring中@Autowired和@Resource注解的用法和区别

文章详细介绍了Spring框架中的@Autowired和@Resource注解的用法,包括它们在构造方法、成员变量和方法参数上的应用。@Autowired默认按类型自动装配,而@Resource默认按名称装配,同时提供了更多配置选项。两者的来源、默认行为和应用场景都有所不同,@Autowired更广泛,而@Resource是JDK1.6引入的特性,适用于所有Java框架。
摘要由CSDN通过智能技术生成

点个关注,必回关

注解用法

1、@Autowired注解用法
spring中对构造方法、成员变量、方法参数进行标注。能够根据对象的类型完成自动注入

public class Service {
	//构造方法注入
	@Autowired
	public ServiceService service){
		this.service = service;
	}
	//成员变量注入
	@Autowired
	private Service service;
	
	//方法参数注入
	@Autowired
	public void setService(Service service){
		this.service = service;
	}
}

2、@Resource注解用法
遵循了JSR-250规范,是JDK1.6以上加入的一个新特性。

public class Service {
	
	@Resource(name = "service1")
	private Service service1;
	
	@Resource(name = "service2"
	private Service service2
	
	@Resource
	private Service service3;
	
	@Resource
	private Service service4;
}

小知识:

@Resource注解:适用于所有的Java框架
@Autowired注解:只适用于Spring
@Resource能够支持对象类型注入,也能够支持对象名称注入

@Autowired和@Resource的区别

1、注解内部定义的参数不同

@Autowired只包含一个required参数(默认是“true”,表示开启自动注入)

在这里插入图片描述
@Resource包含七个参数(最重要的两个:name、type)
在这里插入图片描述

2、装配方式的默认值不同

@Autowired:按type自动装配
@Resource:默认按name自动装配(也可以指定name或者type进行自动装配)

3、注解应用的范围不同

@Autowired能够用在构造方法、成员变量、方法参数上,以及注解上
@Resource能够用在成员变量和方法参数上

4、出处不同

@Autowired在定义在spring中
@Resource定义在JDK中

5、装载顺序不同
@Autowired:

1、spring先找类型为users的bean 2、如果存在且唯一,则OK
3、如果不唯一,寻找name为users的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了
@Autowired也可以手动指定按照byName方式注入,使用@Qualifier标签,例如: @Autowired()
@Qualifier(“users” )

出现多个bean

 <bean id="CustomerBean" class="demo3.Po.Customer">
        <property name="type" value="1"/>
        <property name="action" value="buy"/>
    </bean>
    <bean id="PersonBean1" class="demo3.Po.Person">
        <property name="name" value="xiaoqiang"/>
        <property name="address" value="Hongkong"/>
        <property name="age" value="18"/>
    </bean>
    <bean id="PersonBean2" class="demo3.Po.Person">
        <property name="name" value="xiaoming" />
        <property name="address" value="Malaisia" />
        <property name="age" value="28" />
    </bean>
   @Autowired
    @Qualifier("PersonBean2") //选择要装配的bean
    private Person person;

    private int type;
    private String action;
@Resource:

@Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖天才小朱(怀玉)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值