简要概述Spring中注解@Autowired和@Resource的区别

本文介绍了Spring框架中Bean的概念,区分了@Autowired和@Resource两种注解的用法,包括它们的默认行为和byName/Type的区别,以及在多实现类时可能出现的问题及其解决方案。
摘要由CSDN通过智能技术生成

在了解注解之前,首先需要明白什么是Bean:
凡是子类及带有方法或属性的类,都要加注册Bean到Spring Ioc的注解,如@Component、@Repository、@Controller、@Service
在Spring中,标识一个@符号,Spring就会从表示区域拿到一个Bean或者注册一个Bean。

Bean的格式

<bean id="userServiceImpl" class="cn.com.bochy.service.impl.UserServiceImpl" autowire="byName"></bean> 
<bean id="userDao" class="cn.com.bochy.dao.impl.UserDaoImpl"> </bean>
<!--代码autowire="byName"意思是通过id="userDao"来查找Bean中的userDao对象-->
<!--byType则表示通过class来找Bean中的对象-->

​ 注解分为两类

  • 一类是使用Bean,即把已经在xml中配置好的Bean拿来使用(@Autowired,@Resource可以通过byTYPE、byNAME来获取Bean)
  • 一类是注册Bean,@Controller、@Service,这些注解都是把标注的实例化对象转化成一个Bean,放在IoC容器中,等要用到时候和上面的@Autowired,@Resource配合然后组装起来

@Autowired和@Resource的区别:

  • @Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的;
  • @Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入;

byType和byName的区别

  • byName就是通过Bean的id或者name,byType就是按Bean的Class的类型。
@Autowired
private UserService userService;
//默认先通过byType找IOC匹配,找不到UserService.class再通过byName匹配,找不到userService就报错
//@Resource默认先byName
  • 容易出现的问题及解决方案
class UserServiceImpl_1 implements UserService{}
class UserServiceImpl_2 implements UserService{}

@Autowired
private UserService userService;
@Resource
private UserService userService;
//这样定义两种注解都报错,不管是byName还是byType在IOC中都找不到对应的Bean
//解决方案:使用@Qualifiter注解改变变量id匹配Bean
@Autowired
@Qualifiter(value="userServiceImpl1")
private UserService userService;
  • @Resource还有两个属性
@Resource						//正常情况
@Resource(name = " ")			//只匹配id,IOC中找不到id报错
@Resource(Type = " ")			//只匹配类
@Resource(name=" "Type=" ")	//全部匹配才通过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值