Java Spring各种依赖注入注解的区别.doc

上传人:小** 文档编号:86707506 上传时间:2019-03-22 格式:DOC 页数:23 大小:106.50KB
返回 下载 相关 举报
Java Spring各种依赖注入注解的区别.doc_第1页
第1页 / 共23页
Java Spring各种依赖注入注解的区别.doc_第2页
第2页 / 共23页
Java Spring各种依赖注入注解的区别.doc_第3页
第3页 / 共23页
Java Spring各种依赖注入注解的区别.doc_第4页
第4页 / 共23页
Java Spring各种依赖注入注解的区别.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《Java Spring各种依赖注入注解的区别.doc》由会员分享,可在线阅读,更多相关《Java Spring各种依赖注入注解的区别.doc(23页珍藏版)》请在金锄头文库上搜索。

1、Spring对于Bean的依赖注入,支持多种注解方式:Resourcejavax.annotationJSR250 (Common Annotations for Java)Injectjavax.injectJSR330 (Dependency Injection for Java)Autowiredorg.springframework.bean.factorySpring直观上看起来,Autowired是Spring提供的注解,其他几个都是JDK本身内建的注解,Spring对这些注解也进行了支持。但是使用起来这三者到底有什么区别呢?笔者经过方法的测试,发现一些有意思的特性。区别总结如下:

2、一、Autowired有个required属性,可以配置为false,这种情况下如果没有找到对应的bean是不会抛异常的。Inject和Resource没有提供对应的配置,所以必须找到否则会抛异常。二、 Autowired和Inject基本是一样的,因为两者都是使用AutowiredAnnotationBeanPostProcessor来处理依赖注入。但是Resource是个例外,它使用的是CommonAnnotationBeanPostProcessor来处理依赖注入。当然,两者都是BeanPostProcessor。Autowired和Inject- 默认 autowired by typ

3、e- 可以 通过Qualifier 显式指定 autowired by qualifier name。- 如果 autowired by type 失败(找不到或者找到多个实现),则退化为autowired by field nameResource- 默认 autowired by field name- 如果 autowired by field name失败,会退化为 autowired by type- 可以 通过Qualifier 显式指定 autowired by qualifier name- 如果 autowired by qualifier name失败,会退化为 autow

4、ired by field name。但是这时候如果 autowired by field name失败,就不会再退化为autowired by type了。TIPS Qualified name VS Bean name在Spring设计中,Qualified name并不等同于Bean name,后者必须是唯一的,但是前者类似于tag或者group的作用,对特定的bean进行分类。可以达到getByTag(group)的效果。对于XML配置的bean,可以通过id属性指定bean name(如果没有指定,默认使用类名首字母小写),通过标签指定qualifier name: 如果是通过注解方

5、式,那么可以通过Qualifier注解指定qualifier name,通过Named或者Component(Service,Repository等)的value值指定bean name:Component(lamborghini)Qualifier(luxury)public class Lamborghini implements Car 或者ComponentNamed(lamborghini)Qualifier(luxury)public class Lamborghini implements Car 同样,如果没有指定bean name,那么Spring会默认是用类名首字母小写(L

6、amborghini=lamborghini)。三、 通过Anotation注入依赖的方式在XML注入方式之前进行。如果对同一个bean的依赖同时使用了两种注入方式,那么XML的优先。但是不同担心通过Anotation注入的依赖没法注入XML中配置的bean,依赖注入是在bean的注册之后进行的。四、目前的autowired by type方式(笔者用的是3.2.3.RELEASE版本),Spring的AutowiredAnnotationBeanPostProcessor实现都是有”bug”的,也就是说Autowired和Inject都是有坑的(称之为坑,不称之为bug是因为貌似是故意的。)

7、。这是来源于线上的一个bug,也是这边文章的写作原因。现场如下:application-context.xml中有如下定义: 其中static-field应用的常量定义在如下类中:package me.arganzheng.study.spring.autowired;public interface Constants public interface Language public static final String EN = CommonConstants.LANG_ENGLISH; public static final String JP = CommonConstants.LANG_JAPANESE; public static final String IND = CommonConstants.LANG_INDONESIAN; public static final String PT = Co

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号