Java注解机制之Spring自动装配实现原理详解

上传人:壹****1 文档编号:458406522 上传时间:2024-01-12 格式:DOC 页数:2 大小:63KB
返回 下载 相关 举报
Java注解机制之Spring自动装配实现原理详解_第1页
第1页 / 共2页
Java注解机制之Spring自动装配实现原理详解_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《Java注解机制之Spring自动装配实现原理详解》由会员分享,可在线阅读,更多相关《Java注解机制之Spring自动装配实现原理详解(2页珍藏版)》请在金锄头文库上搜索。

1、Java注解机制之Spring动装配实现原理详解Ja中使用注解的情况主要在Spring(Spring等),注解实际上相当于一种标记语言,它允许你在运行时动态地对拥有该标记的成员进行操作。注意:prin框架默认不支持自动装配的,要想使用自动装配需要修改prin配置文件中an标签的a属性。自动装配属性有6个值可选,分别代表不同的含义:a从Spring不境中获取目标对象时,目标对象中的属性会根据名称在整个Spring不境中查找a标签的i属性值。如果有相同的,那么获取这个对象,实现关联。整个Spring不境:表示所有的prin配置文件中查找,那么i不能有重复的。p从Spring不境中获取目标对象时,目

2、标对象中的属性会根据类型在整个priri不境中查找a标签的属性值。如果有相同的,那么获取这个对象,实现关联。缺点:如果存在多个相同类型的对象,会出错;如果属性为单一类型的数据,那么查找到多个关联对象会发生错误;如果属性为数组或集合泛型类型,那么查找到多个关联对象不会发生异常。nr使用构造方法完成对象注入,其实也是根据构造方法的参数类型进行对象查找,相当于釆用的e式。a自动选择:如果对象没有无参数的构造方法,那么自动选择nr的自动装配方式进行构造注入。如果对象含有无参数的构造方法,那么自动选择的自动装配方式进行注入。rn不支持自动装配功能a表示默认釆用上一级标签的自动装配的取值。如果存在多个配置

3、文件的话,那么每一个配置文件的自动装配方式都是独立的。注解使用需要三个条件包括注解声明,使用注解的元素,操作使用注解元素的代码。第一步注解声明,注解是一种类型,自定义注解编写代码如下:paagannotation;imprava.lang.annotatinmentType;import:java.lang.annotatinninimport:java.lang.annotation.RetentionPolicy;import:java.lang.annotainargRetention(entionPiTargetmentTypep:blic:intrfacannain:String:p

4、aramVal河北省参数名为paraa默认值为河北省使用自定义注解元素,代码如下:ring:napaagannain使/用/注:解并使用默认参数AttachAnnotavoid:At归属:p:b:SnachAnnp+ri:ntnalmnSringnapilass:AttachEmlement:普/通/:pivitachDefa:lt(String:na:Sys归属:.:p+ri:ntnalmne();a路人宅r使/用/注:解并传入参数annain河北省aapiviannaS归属:prinnan测试操作执行main函数,具体代码如下:packageannotation;importjava.la

5、ng.reflect.InvocationTargetException;importjava.lang.reflect.Method;publicclassAnnotionOperatorpublicstaticvoidmain(Stringargs)throwsIllegalAccessException,IllegalArgumentException,InvocationTargetException,ClassNotFoundExceptionAttachEmlementelement=newAttachEmlement();/初始化一个实例,用于方法调用Methodmethods=

6、AttachEmlement.class.getDeclaredMethods();/获得所有方法for(Methodmethod:methods)AttachAnnotationannotationTmp=null;if(annotationTmp=method.getAnnotation(AttachAnnotation.class)!=null)method.invoke(element,annotationTmp.paramValue();elsemethod.invoke(element,河南省);执行结果:归属:河南省归属:河北省归属:河北省Spring为了方便自动装配进行操作有两

7、种方式:继承org.springframework.web.context.support.SpringBeanAutowiringSupport类或者添加Component/Controller等注解并在Spring配置文件里声明context:component-scan元素配置。1) 继承方式实现自动装配,查看Spring3.1.1源代码会发现SpringBeanAutowiringSupport类中有如下代码:/* Thisconstructorperformsinjectiononthisinstance,* basedonthecurrentwebapplicationcontex

8、t.* Intendedforuseasabaseclass.* see#processInjectionBasedOnCurrentContext*/publicSpringBeanAutowiringSupport()processInjectionBasedOnCurrentContext(this);分析:Java在实例化构造时会调用默认父类无参构造方法,而Spring就是通过这一点,让操作元素代码执行的。2) 通过注解方式的也和上述理论相似,值得注意的是注解自动装配无需完成注/setter*,查看Spring3.1.1源码注解调用顺序得出:org.springframework.we

9、b.context.support.SpringBeanAutowiringSupport#SpringBeanAutowiringSupport=org.springframework.web.context.support.SpringBeanAutowiringSupport#processInjectionBasedOnCurrentContext=org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor#processInjection=org.springframework.b

10、eans.factory.annotation.lnjectionMetadata#lnjection查看inject方法源代码如下:/* Eitherthisorlink#getResourceTolnjectneedstobeoverridden.*/protectedvoidinject(Objecttarget,StringrequestingBeanName,PropertyValuespvs)throwsThrowableif(this.isField)Fieldfield=(Field)this.member;ReflectionUtils.makeAccessible(fiel

11、d);field.set(target,getResourceTolnject(target,requestingBeanName);elseif(checkPropertySkipping(pvs)return;tryMethodmethod=(Method)this.member;ReflectionUtils.makeAccessible(method);method.invoke(target,getResourceTolnject(target,requestingBeanName);catch(InvocationTargetExceptionex)throwex.getTargetException();分析:通过上述源码Spring自动装配是通过反射机制来实现的。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

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