注解@Autowired和@Resource区别及使用方法

注解@Autowired和@Resource区别及使用方法

@Resource作用相当于@Autowired,都是用作bean注入的。
spring不但支持自家的注解,也支持几个由JSR-250规范定义的注解,分别是@Resource、@PostConstruct以及@PreDestroy

相同点

两者都可以写在字段或set方法上;如果写在字段上,则不需要再写set方法。

区别

  1. @Autowired是spring的注解,@Resource是j2ee的注解。
  2. @Autowired默认按照byType自动注入;@Resource默认按照byName自动注入

@Resource属性说明

@Resource有两个属性比较重要,name和type,spring将name属性解析为bean的名字,将type属性解析为bean的类型。它默认按照name去寻找bean进行注入,如果没有找到则按type去寻找。都找不到的话抛异常。
装配顺序:

  • 如果同时指定了name和type,则从spring上下文中找到唯一匹配的bean进行装配,找不到抛异常
  • 如果指定了name,则从spring上下文中查找名称(id)匹配的bean进行装配,找不到抛异常
  • 如果指定了type,则从spring上下文中查找类型匹配的bean进行装配,找不到或找到多个都会抛异常
  • 如果既没有指定name又没有指定type,默认按照byName的策略进行装配。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配

@Autowire属性说明

1、@Autowire有一个重要属性,required,表示需要注入的这个bean对象是否必需,如果必需但是按byName没有找到这个bean就会抛异常。required属性缺省值为true必需,false不必需
2、如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

public class TestServiceImpl {
  @Autowired
  @Qualifier("userDao")
  private UserDao userDao; 
}

@Autowired的两种使用方法

spring会找到上下文中类型为UserDao的bean自动注入

// 通过字段注入
@Autowired
// @Autowired(required = false) // 允许字段为null。required属性的缺省值为true
private UserDao userDao;
// 通过setter方法注入
private UserDao userDao;

@Autowired
public void setUserDao(UserDao userDao){
	this.userDao = userDao;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值