关于@autoWire与@resource的区别
2015-12-11 11:09
162 查看
首先@resource的范围比@autoWire的大
首先根据类型找到所有可以满足条件的bean
判断bean长度,如果没有,则根据@autowired中的required属性进行判断是否抛出异常(默认为true)
如果多于一个,则尝试寻找最优的那一个,如果最优的未找到,则抛出异常
如果只有一个,则直接使用此bean
如果@autoWire是在setter方法上标注的话,默认是按照参数名称而不是setter后面的属性名称进行注入,如果没有这个参数名称的话就按byType,以下是按tx1参数名称注入
如果autoWire标注在字段上面,则直接使用字段名称。进行查找,如
如果是按照@resource标注的话先会根据name进行匹配,如果匹配不到在退化成byType
获取element的名称,判断beanFactory是否存在此name的bean
如果存在,则直接使用此name进行查询
否则退化到默认的autowire查找方式
这里说是element的名称,因为它的来源有2个地方。一是在resouce注解中配置的name属性,第二就是setter名称或者是field名称(取决于@Resource的配置地点),这里说的是setter名称,而不是属性名称,这就是需要注意的地方
值得注意的是,如果在使用resource时,根据resource的name找到了bean,但该bean并不是所需要的bean类型,则就要报类型不 匹配错误了。即spring在查找时,并没有保证类型判断,即你配置一个name的tx2的bean,但该类型即为TxInterface2而不是 TxInterface,则spring在后期直接报异常,而不会fallback了。但Autowired注解则不会产生这种情况,因为它只会从满足 type的情况中的bean中查找
首先根据类型找到所有可以满足条件的bean
判断bean长度,如果没有,则根据@autowired中的required属性进行判断是否抛出异常(默认为true)
如果多于一个,则尝试寻找最优的那一个,如果最优的未找到,则抛出异常
如果只有一个,则直接使用此bean
如果@autoWire是在setter方法上标注的话,默认是按照参数名称而不是setter后面的属性名称进行注入,如果没有这个参数名称的话就按byType,以下是按tx1参数名称注入
public void setTx2(TxInterface tx1) {this.tx2 = tx1;}
如果autoWire标注在字段上面,则直接使用字段名称。进行查找,如
@autowire private String username;
如果是按照@resource标注的话先会根据name进行匹配,如果匹配不到在退化成byType
获取element的名称,判断beanFactory是否存在此name的bean
如果存在,则直接使用此name进行查询
否则退化到默认的autowire查找方式
这里说是element的名称,因为它的来源有2个地方。一是在resouce注解中配置的name属性,第二就是setter名称或者是field名称(取决于@Resource的配置地点),这里说的是setter名称,而不是属性名称,这就是需要注意的地方
值得注意的是,如果在使用resource时,根据resource的name找到了bean,但该bean并不是所需要的bean类型,则就要报类型不 匹配错误了。即spring在查找时,并没有保证类型判断,即你配置一个name的tx2的bean,但该类型即为TxInterface2而不是 TxInterface,则spring在后期直接报异常,而不会fallback了。但Autowired注解则不会产生这种情况,因为它只会从满足 type的情况中的bean中查找
相关文章推荐
- PetaPoco利用ODP.NET Managed Driver连接Oracle
- 5.对于RMI的理解
- 【转】字符设备模型
- jQuery弹簧插件编写基础之“又见弹窗”
- 4.hadoop中的压缩
- hdu5521 spfa+超图转换+最短路+邻接表建图
- PE总结13 --PE文件结构之 解析资源表
- python火车票程序
- 文章标题
- iOS 导航条小结
- 经管系网页添加导航栏下拉菜单
- 3.hadoop中的序列化
- Gradle Gradle如何生成导出未签名apk
- iOS 响应链
- hdu1166 敌兵布阵(线段树)
- PE总结12---PE文件结构之资源表 (IMAGE_RESOURCE_DIRECTORY)
- CABasicAnimation *animationGroup
- [MFC]CListView列表视图
- C#中WriteLine与Write的区别
- Happy Number