@Resource和@Autowired区别

Spring容器以name为key储存bean!这里的name可以指定,否则取首字母小写的类名。有相同的就报异常:BeanDefinitionStoreException!

@Resource
@Resource有两个常用属性name、type,所以分4种情况:
1.指定name和type:通过name找到唯一的bean,找不到抛出异常;如果type和字段类型不一致,也会抛出异常
2.指定name:通过name找到唯一的bean,找不到抛出异常
3.指定type:通过tpye找到唯一的bean,如果不唯一,则抛出异常:NoUniqueBeanDefinitionException
4.都不指定:通过字段名作为key去查找,找到则赋值;找不到则再通过字段类型去查找,如果不唯一,则抛出异常:NoUniqueBeanDefinitionException

@Autowired
@Autowired只有一个属性required,默认值为true,为true时,找不到就抛异常,为false时,找不到就赋值为null
@Autowired按类型查找,如果该类型的bean不唯一,则抛出异常;可通过组合注解解决@Autowired()@Qualifier(“XXXX”)或使用@Primary注解,在有多个实现bean时告诉spring首先@Primary修饰的那个

@Service("service")
//@Primary //在有多个实现bean时告诉spring首先@Primary修饰的那个
public class EmployeeServiceImpl implements EmployeeService {
    public EmployeeDto getEmployeeById(Long id) {
        return new EmployeeDto();
    }
}

@Service("service1")
public class EmployeeServiceImpl1 implements EmployeeService {
    public EmployeeDto getEmployeeById(Long id) {
        return new EmployeeDto();
    }
}

@Controller
@RequestMapping("/emplayee.do")
public class EmployeeInfoControl {
    
    @Autowired
    @Qualifier("service")
    EmployeeService employeeService;
    
    @RequestMapping(params = "method=showEmplayeeInfo")
    public void showEmplayeeInfo(HttpServletRequest request, HttpServletResponse response, EmployeeDto dto) {
        #略
    }
}

相同点:
Spring都支持;
都可以作用在字段和setter方法上;

不同点:
Resource是JDK提供的,而Autowired是Spring提供的;
Resource不允许找不到bean的情况,而Autowired允许(@Autowired(required = false));
指定name的方式不一样,@Resource(name = “XXX”),@Autowired()@Qualifier(“XXX”);
Resource默认通过name查找,而Autowired默认通过type查找;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值