白话Spring(基础篇)---bean之间的关系

来源:互联网 发布:网络寻凶第一季百度云 编辑:程序博客网 时间:2024/05/16 06:33

[一知半解,就是给自己挖坑]

在前面的内容中,我们介绍了Spring的bean的各种注入及配置方式。本文我们将来介绍Spring中bean之间的关系,他们之间的关系包括继承,依赖,引用三种方式。按照惯例,首先我们来准备一下我们的开发环境:

a.操作系统:win7 x64

b.开发工具:eclipse mars j2ee版本,maven3.3.2,Spring 4,junit4.12

c.复制Spring06工程,重命名为Spring07工程。工程结构图如下:


------------------------------------------------------------------------------------------------------------------------------------------------------

正文开始:

一,继承关系

1.修改beans.xml配置文件为如下内容:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="AbstractRecord" class="com.java.ingo.entity.Record" abstract="true"><property name="company" value="ABCD"></property></bean><bean id="Record" parent="AbstractRecord"><property name="position" value="Engineer"></property><property name="address" value="Beijing"></property></bean></beans>
2.修改单元测试方法为如下内容:

@org.junit.Testpublic void test1() {System.out.println("Start Test()");Record customer1 = (Record)ac.getBean("Record");System.out.println(customer1);}
3.测试方法:在test1方法上,右键run as--->junit test。观察控制台输出结果即可。

注意:这里请读者再在id为Record的bean上增加属性company的配置,再次运行单元测试方法,观察输出结果与上文输出结果的区别。

结论:Spring的继承关于与Java的继承关系思想一致。但使用的配置关键字为abstract。

-----------------------------------------------

二,依赖关系

1.修改beans.xml为如下内容:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="AbstractRecord" class="com.java.ingo.entity.Record" abstract="true"><property name="company" value="ABCD"></property></bean><bean id="Record" parent="AbstractRecord"><property name="position" value="Engineer"></property><property name="address" value="Beijing"></property></bean><bean id="Customer1" class="com.java.ingo.entity.Customer"><property name="name" value="Tom"></property><property name="sex" value="male"></property><property name="age" value="22"></property></bean></beans>
2.在Customer.java,Record.java中的构造函数中分别加入System.out.println("------创建人员-------");与System.out.println("--------创建记录--------");

3.测试方法:在test1方法上,右键run as--->junit test。观察控制台输出结果即可。

控制台的输出结果为如下内容:

这时,我们观察到:创建记录的动作先于创建人员。这是不符合业务逻辑的。因此我们需要利用bean之间的依赖关系来处理此需求。

改进方法:

1.将id为Record的bean修改为如下内容:

<bean id="Record" parent="AbstractRecord" depends-on="Customer1"><property name="position" value="Engineer"></property><property name="address" value="Beijing"></property></bean>
2.再次运行测试方法,观察控制台的输出结果即可

注意,依赖关系可以多级,多个存在。即如下面的形式

a.A--->B--->C--->D。配置方式为:依赖项A仅配置相邻依赖项B,而不配置CD的

b.A,B--->C--->D。配置方式为:依赖项A仅配置相邻依赖项C,依赖项B仅配置相邻依赖项C,而不配置D的

c.A--->B,C--->D。配置方式为:依赖项A配置相邻依赖项B,C。即使用逗号链接,如depends-on=“idA,idB”

--------------------------------------------------------

三,引用关系

引用关系的使用方法就是我们在前文中多次演示的ref="id"的用法。这里不再赘述,有疑问的读者可以参考【白话Spring(基础篇)---参数注入】中的二.使用注入bean的方式注入】

-----------------------------------------------------------------------------------------------------------------------------------------------------

至此,白话Spring(基础篇)---bean之间的关系结束


备注:

经过前面的单元方法用例,我们发现Spring中bean的使用及配置存在重合部分,希望读者能够将重合的使用方法联系起来配置与使用。以便更好的达成我们的需求设计


参考资料:

Spring官网:http://spring.io/docs





1 0
原创粉丝点击