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企业应用实战》