首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring读书笔记-Spring的Bean之配备依赖

2012-12-23 
Spring读书笔记-----Spring的Bean之配置依赖前一篇博客介绍了Spring中的Bean的基本概念和作用域(bean id

Spring读书笔记-----Spring的Bean之配置依赖

         前一篇博客介绍了Spring中的Bean的基本概念和作用域(<bean id="person" class="lee.Person"><!-- Property配置需要依赖注入的属性 --><property name="name" value="chenming" /><property name="age" value="22" /></bean>

 

         Spring会为<bean…/>元素创建一个java对象,一个这样的java对象对应一个Bean实例,对于如上代码,Spring会采用如下形式来创建Java实例。

 

//获取lee.Person类的Class对象Class  personClass = Class.forName("lee.Person");//创建lee.Person类的默认实例Object personBean = personBean.newInStance();


         创建该实例后,Spring就会遍历该<bean../>元素的所有<property…/>子元素。<bean…/>元素每包含一个<property…/>子元素,Spring就会为该Bean实例调用一次setter方法。类似于下面程序:

//获取name属性的setter方法String setName = "set"+"Name";//获取lee.Person类里面的Set()Name方法java.lang.reflect.Method setMethod = personClass.getMethod(setName, aVal.getClass());//调用Bean实例的SetName()方法setMethod.invoke(personBean, aVal);


         对于使用<constructor-arg…/>元素来指定构造器注入,Spring不会采用默认的构造器来创建Bean实例,而是使用特定的构造器来创建该Bean实例。

<bean id="person" class="lee.Person"><constructor-arg index="0" value="aVal" /><constructor-arg index="1" value="bVal" /></bean>

 

         针对上面的代码,Spring会采用类似如下的代码来创建Bean实例:

//获取lee.Person类的class对象Class  personClass = Class.forName("lee.Person");//获取第一个参数是aVal类型,第二个参数是bVal类型的构造器Constructor personCtr = personClass.getConstructor(aVal.getClass(),bVal.getClass());//以指定构造器创建Bean实例Object bean = personCtr.newInstance(aVal,bVal);


          上面的程序只是一个实例,实际上Spring还需要根据<property…/>元素、<contructor-arg../>元素所使用value属性,ref属性等来判断需要注入的到底是什么数据类型,并要对这些值进行合适的类型转换,所以Spring的实际处理过程会更加复杂。

 

            读李刚《轻量级Java EE企业应用实战》

热点排行