@Resource注解和@Autowired注解的区别

一、共同作用
在服务启动的时候,实现依赖注入相关bean
二、不同点
1、@Autowired
(1)为Spring提供的注解,需要导入org.springframework.beans.factory.annotation.Autowired;
(2)通过byType的方式,也就是按照类型匹配,而且必须要求这个对象存在;
(3)例子:
我们有个UserService接口类:

public interface UserService {
    String getUser();
}

UserService下面有两个接口实现类UserService_1_Impl和UserService_2_Impl如下:

@Service
public class UserService_1_Impl implements UserService{
    @Override
    public String getUser() {
        System.out.println("UserService_1_Impl");
        return null;
    }
}
@Service
public class UserService_2_Impl implements UserService{
    @Override
    public String getUser() {
        System.out.println("UserService_2_Impl");
        return null;
    }
}

控制层注入UserService代码如下:

@Controller
public class TestController {
    @Autowired
    private UserService userService;

}

此时启动项目会报错:required a single bean, but 2 were found:
此时再加上一个@Qualifier注解指定要注入bean的名称name,代码如下:

@Controller
public class TestController {
    @Autowired
    @Qualifier(value = "userService_1_Impl")
    private UserService userService;

}

这样就指定注入userService_1_Impl这个bean
2、@Resource
(1)注解由J2EE提供,需要导入包javax.annotation.Resource。
(2)默认通过byName的方式,也就是按照名称匹配,如果找不到名字,则通过byType实现。如果两个都找不到的情况下,就报错。
(3)例子:
以上面代码为基础,控制层注入UserService代码如下:

@Controller
public class TestController {
    @Resource(name = "userService_1_Impl")
    private UserService userService;
}

三、总结
Spring属于第三方的,J2EE是Java自己的东西。使用@Resource可以减少代码和Spring之间的耦合。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值