@Autowire与@Resource用法以及它们的区别

前言:平常使用这个两个注解的时候就是相当然的使用,没有去具体比价两者的区别,在网上查阅了资料,加自己测试后,记录一下。

首先,这个两个注解都是用来完成组件的装配的,即利用依赖注入(DI),完成对ioc容器当中各个组件之间依赖的装配赋值

1.@Autowire

@Autowire
Employee employee;

这是spring提供的一个注解,,默认是按照类型装配(by-type),要求容器中一定要有这个类型的对象,如果没有将会报错,抛出异常。也可以通过设置可以@Autowired(required = false),来告诉容器,如果没有,可以不注入。

  • 当容器中有多个相同类型的对象,会报错,可以通过@Qualifier("beanname"),来指定装配哪个对象的id。或者用@Primay 如下图所示:
	@Qualifier(value = "employee1")
	@Autowired
	Employee employee;

1.@Resource

@Resource
Employee employee;

@Resource注解是属于J2EE的一个注解,他可以设置 by-name 和by-type来进行自动装配。

  • 当设置了 nametype 即:@Resource(name = "employee", type = "Employee.class"),根据设置的条件到ioc中注入唯一的 对象
  • 当只设置了name,则按照name,装配,如果没有那么抛出异常。
  • 当只设置了type,那么按照类型装配,如果ioc容器当中存在多个,或不存在,抛出异常。
  • 如果nametype都没有指定,那么先按by-name查找,(如果 @Autowire注解标注在对象上 by-name查找的值 是对象的字段名,在方法上,则是参数的名),如果by-name 没查找到,那么就进行 by-type查找。如果都没查找到,那么抛出异常。

总结:

  • @Autowire通过by-type装配,如果有多个,可以通过@Qualifier指定。 (属于spring的注解)
  • @Resource,可以by-type ,也可以by-name,如果指定了 则按照指定装配,都没指定 先by-name 后by-type (属于J2EE中注解)
  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值