java spring各种依赖注入注解地区别

java spring各种依赖注入注解地区别

ID:34464953

大小:197.00 KB

页数:21页

时间:2019-03-06

java spring各种依赖注入注解地区别_第1页
java spring各种依赖注入注解地区别_第2页
java spring各种依赖注入注解地区别_第3页
java spring各种依赖注入注解地区别_第4页
java spring各种依赖注入注解地区别_第5页
资源描述:

《java spring各种依赖注入注解地区别》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实用文案Spring对于Bean的依赖注入,支持多种注解方式:@Resourcejavax.annotationJSR250(CommonAnnotationsforJava)@Injectjavax.injectJSR330(DependencyInjectionforJava)@Autowiredorg.springframework.bean.factorySpring直观上看起来,@Autowired是Spring提供的注解,其他几个都是JDK本身内建的注解,Spring对这些注解也进行了支持。

2、但是使用起来这三者到底有什么区别呢?笔者经过方法的测试,发现一些有意思的特性。区别总结如下:一、@Autowired有个required属性,可以配置为false,这种情况下如果没有找到对应的bean是不会抛异常的。@Inject和@Resource没有提供对应的配置,所以必须找到否则会抛异常。二、@Autowired和@Inject基本是一样的,因为两者都是使用AutowiredAnnotationBeanPostProcessor来处理依赖注入。但是@Resource是个例外,它使用的是Common

3、AnnotationBeanPostProcessor来处理依赖注入。当然,两者都是BeanPostProcessor。@Autowired和@Inject-默认autowiredbytype标准实用文案-可以通过@Qualifier显式指定autowiredbyqualifiername。-如果autowiredbytype失败(找不到或者找到多个实现),则退化为autowiredbyfieldname@Resource-默认autowiredbyfieldname-如果autowiredbyfiel

4、dname失败,会退化为autowiredbytype-可以通过@Qualifier显式指定autowiredbyqualifiername-如果autowiredbyqualifiername失败,会退化为autowiredbyfieldname。但是这时候如果autowiredbyfieldname失败,就不会再退化为autowiredbytype了。TIPSQualifiednameVSBeanname在Spring设计中,Qualifiedname并不等同于Beanname,后者必须是唯一的,但

5、是前者类似于tag或者group的作用,对特定的bean进行分类。可以达到getByTag(group)的效果。对于XML配置的bean,可以通过id属性指定beanname(如果没有指定,默认使用类名首字母小写),通过标签指定qualifiername:如果是通过注解方式,那么可以通过@Qualifier注解指定qualifiername,通过@Named或者@Component(@Service,@Repository等)的value值指定beanname:@Component("lamborghini")@Qualifier("luxury")publicclassLamborghiniimplementsCar{}或者标准实用文案@Component@Named("lamborghin

7、i")@Qualifier("luxury")publicclassLamborghiniimplementsCar{}同样,如果没有指定beanname,那么Spring会默认是用类名首字母小写(Lamborghini=>lamborghini)。三、通过Anotation注入依赖的方式在XML注入方式之前进行。如果对同一个bean的依赖同时使用了两种注入方式,那么XML的优先。但是不同担心通过Anotation注入的依赖没法注入XML中配置的bean,依赖注入是在bean的注册之后进行的。四、目前的

8、autowiredbytype方式(笔者用的是3.2.3.RELEASE版本),Spring的AutowiredAnnotationBeanPostProcessor实现都是有”bug”的,也就是说@Autowired和@Inject都是有坑的(称之为坑,不称之为bug是因为貌似是故意的。。)。这是来源于线上的一个bug,也是这边文章的写作原因。现场如下:application-context.xml中有如下定义:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。