@Autowire与@Resource用法以及它们的区别
前言:平常使用这个两个注解的时候就是相当然的使用,没有去具体比价两者的区别,在网上查阅了资料,加自己测试后,记录一下。
首先,这个两个注解都是用来完成组件的装配的,即利用依赖注入(DI),完成对ioc容器当中各个组件之间依赖的装配赋值
1.@Autowire
@Autowire
Employee employee;
这是spring提供的一个注解,,默认是按照类型装配(by-type),要求容器中一定要有这个类型的对象,如果没有将会报错,抛出异常。也可以通过设置可以@Autowired(required = false)
,来告诉容器,如果没有,可以不注入。
- 当容器中有多个相同类型的对象,会报错,可以通过
@Qualifier("beanname")
,来指定装配哪个对象的id。或者用@Primay 如下图所示:
@Qualifier(value = "employee1")@AutowiredEmployee employee;
1.@Resource
@Resource
Employee employee;
@Resource注解是属于J2EE的一个注解,他可以设置 by-name 和by-type来进行自动装配。
- 当设置了
name
和type
即:@Resource(name = "employee", type = "Employee.class")
,根据设置的条件到ioc中注入唯一的 对象 - 当只设置了
name
,则按照name,装配,如果没有那么抛出异常。 - 当只设置了
type
,那么按照类型装配,如果ioc容器当中存在多个,或不存在,抛出异常。 - 如果
name
和type
都没有指定,那么先按by-name查找,(如果 @Autowire注解标注在对象上 by-name查找的值 是对象的字段名,在方法上,则是参数的名),如果by-name 没查找到,那么就进行 by-type查找。如果都没查找到,那么抛出异常。
总结:
- @Autowire通过by-type装配,如果有多个,可以通过@Qualifier指定。 (属于spring的注解)
- @Resource,可以by-type ,也可以by-name,如果指定了 则按照指定装配,都没指定 先by-name 后by-type (属于J2EE中注解)
@Autowire与@Resource用法以及它们的区别相关推荐
- @Autowire与@Resource用法
1.0 spring的配置文件 spring-context.xml <?xml version="1.0" encoding="UTF-8"?> ...
- 一次性讲清 Spring 常用注解 @Bean 、 @Component 、@Autowire、@Resource 的区别, 你知道吗?
本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvice 是如何处理自定义异常的等等. Spring ...
- @Autowire和@Resource区别
介绍 @Autowire和@Resource都是Spring支持的注解方式动态装配bean. 详解 @Autowire @Autowire默认按照类型(by-type)装配,默认情况下要求依赖对象必须 ...
- Autowire 和 @Resource 的区别
1.@Autowire 和 @Resource都可以用来装配bean,都可以用于字段或setter方法. 2.@Autowire 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许 nul ...
- @Autowire 和 @Resource 的区别
1.@Autowire 和 @Resource都可以用来装配 bean,都可以用于字段或 setter 方法. 2.@Autowire 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许 ...
- Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法
一.Spring定义bean,@Component.@Repository.@Service 和 @Controller Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥 ...
- @Autowire和@Resource
注解@Autowire和@Resource,我们都知道都可以用来装配bean,将对象加载到容器之中,但是他们具体有什么区别,现在简单说明一下这俩个注解的区别. @Autowired @Autowire ...
- left join 和join区别_sleep、yield、join方法简介与用法 sleep与wait区别 多线程中篇
Object中的wait.notify.notifyAll,可以用于线程间的通信,核心原理为借助于监视器的入口集与等待集逻辑 通过这三个方法完成线程在指定锁(监视器)上的等待与唤醒,这三个方法是以锁( ...
- PHP: 关键字global 和 超全局变量$GLOBALS的用法、解释、区别
$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容.$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量. php语法中,很多人都 ...
最新文章
- springboot1——第一个springboot程序
- tomcat 设置虚拟路径
- 在SQL Server 2005中解决死锁(转)
- wampserver3.0.6 外网 不能访问
- [XSY] 简单的博弈题(博弈+dp+组合数+容斥)
- debian搭建php mysql_Debian下MySQL安装经验分享
- UI设计灵感|音乐播放器界面如何设计?
- 循环体中调用[NSString stringWithFormat:@%@,Object] 方法的内存问题
- 二倍图css,css二倍图的使用
- Python的Web Services客户端
- 设计模式学习(三):创建型模式【转】
- Stack with max and min 查找栈中最大最小数
- 百度地图API加载点位
- css 如何让盒子垂直居中,css 盒子垂直居中
- po、bo、do、dto、vo相关图形
- Python实战项目23个实战小项目小程序简单
- leetcode387题解
- 流形间的映射(拉回映射与推前映射)及根据其定义的协变矢量和逆变矢量;切空间与余切空间
- Mybatis中TypeHandler的简单应用
- 信奥一本通2069(糖果问题)配解析