- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用反射和内省技术实现简单SpringIOC
【文章标题】用反射和内省技术实现简单SpringIOC
【文章作者】曾健生
【作者邮箱】zengjiansheng1@126.com
【作者QQ】190678908
【作者博客】/newjueqi
/
【作者声明】欢迎转载文章,但转载请保留文章的完整性以及注明文章的出处。
*******************************************************************************
我们知道,spring是个开源的控制反转(Inversion of Control,IoC)和面向切片(AOP)的容器框架。所谓控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到外部容器,控制权的转移就是所谓的反转。
我们把需要创建的对象信息写在一个XML文件中,每次需要维护对象时只需要修改XML文件中的配置信息,不需要重新更改和编译代码,为项目开发带来了极大的方便。
反射
在以前的文章《JDK5.0新特性(2)——反射》(/newjueqi, /)中就已经介绍过反射技术,有了反射技术,就能方便地根据XML的配置创建对象。那对象的维护应该怎么实现呢?这就需要内省技术出马了^-^
内省
内省是Java中Bean类属性的一种缺省的处理方式。例如,有一个类Person,其中有个age属性,可通过setAge()和getAge()方法获取/设置age的值。通过setAge()/getAge()获取/设置age的值是Java中的默认的处理规则,Java提供了一套API来访问某个属性的setAge()/getAge()。
通用的用法通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法
实现简单SpringIOC
通过反射技术,就能动态地创建对象;通过内省技术,就能方便地维护对象。通过以上的两个技术基础,就能实现简单的SpringIOC。
譬如,XML文件中有如下的配置信息
bean id=personDAO class=org.petrelsky5.dao.impl.PersonDAOImpl /
bean id=personService class=org.petrelsky5.service.impl.PersonServiceImpl
property name=personDAO ref=personDAO /
property name=name value=Tom12345/property
property name=age value=12/property
/bean
其中SpringTest.java文件中instanceSpring()有如下测试代码:
ClassPathXmlApplicationContext ctx = null;
ctx = new ClassPathXmlApplicationContext( beans.xml);
PersonDAO personService = (PersonDAO) ctx
.getBean(personDAO);
personService.add();
其中的调用关系如下图1:
图1
在SpringTest.java文件中instanceSpring2()有如下测试代码:
ClassPathXmlApplicationContext ctx = null;
ctx = new ClassPathXmlApplicationContext(beans.xml );
PersonService personService = (PersonService) ctx
.getBean(personService);
personService.save();
其中的调用关系如下图2:
图2
由此可知道:
类ClassPathXmlApplicationContext相当于一个容器。
在XML文件的节点bean中,各部分的内容解释如下:
id:类的标识。
class:类的所在路径。
property:属性信息
name:属性名称。
value:如果属性是值类型的,那么value是相应的属性值。
ref:如果属性是引用类型(譬如PersonServiceImpl类中的属性perso
文档评论(0)