您的位置:首页 > 编程语言 > Java开发

学习Spring(四) -- Spring的继承与依赖

2016-04-17 00:00 387 查看
摘要: 学习了使用spring配置文件,实现bean元素配置信息的继承与依赖

继承

在spring配置文件中,在bean元素里可以使用parent属性来实现配置信息的继承,比如需要十个学生类的bean,其中只有name属性值不同,其他属性都相同:

<bean id="student1" class="..." p:school="UCLA" p:name="s1" ...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s2"...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s3"...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s4"...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s5"...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s6"...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s7"...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s8"...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s9"...(其他属性) />

<bean id="student1" class="..." p:school="UCLA" p:name="s10"...(其他属性) />

在这种情况下可以使用parent属性来解决配置信息重复的问题:

<!-- 继承配置 -->
<bean id="abstract_student" p:name="Lily" p:school="UCLA"
abstract="true"></bean>
<bean id="student2" class="cn.net.bysoft.lesson3.Student" parent="abstract_student"></bean>
<bean id="student3" class="cn.net.bysoft.lesson3.Student" p:name="Jordan"
p:school="NCSU" parent="abstract_student"></bean>

其中第一个bean是abstract_student,该类有一个属性是abstract=true,将这个bean定义为抽象的,这个bean将不可以被容器get到。接下来的两个bean的parent属性都等于第一个bean的id,也就是继承了抽象bean的配置信息,可以通过重写属性来覆盖抽象bean的配置信息。

@Test
public void testParent() {
Student student2 = (Student) ctx.getBean("student2");
Student student3 = (Student) ctx.getBean("student3");
System.out.println(student2);
System.out.println(student3);
/**
* output:Student [name=Lily, school=UCLA]
* Student [name=Jordan, school=NCSU]
* */
}

依赖

在spring配置文件中,可以强制使一个bean依赖另一个bean,比如,在创建一个person对象时,必须在配置文件中存在一个car的bean。

使用depen
3ff8
ds-on属性可以做到以上描述:

<!-- 依赖配置 -->
<bean id="car3" class="cn.net.bysoft.lesson3.Car" p:name="Audi"
p:maxSpeed="300" p:price="500000.00" p:color="Red"></bean>
<bean id="person1" class="cn.net.bysoft.lesson3.Person" p:name="James"
depends-on="car100" p:car-ref="car3"></bean>

person1这个bean中的属性depends-on=car100,但是我们的配置文件中没有id=car100的bean,于是在getbean时会发生异常:

@Test
public void testDependsOn() {
Person person = (Person) ctx.getBean("person1");
System.out.println(person);
/**
* :警告: Exception encountered during context initialization - cancelling
* refresh attempt:
* org.springframework.beans.factory.NoSuchBeanDefinitionException: No
* bean named 'car100' is defined
* */
}

配置文件中,有一个car3,所以将depends-on=car3,在进行测试:

<!-- 依赖配置 -->
<bean id="car3" class="cn.net.bysoft.lesson3.Car" p:name="Audi"
p:maxSpeed="300" p:price="500000.00" p:color="Red"></bean>
<bean id="person1" class="cn.net.bysoft.lesson3.Person" p:name="James"
depends-on="car3" p:car-ref="car3"></bean>

@Test
public void testDependsOn() {
Person person = (Person) ctx.getBean("person1");
System.out.println(person);
/**
* output:Person [name=James, car=Car [name=Audi, maxSpeed=300,
* price=500000.0, color=Red]]
* */
}

以上是spring配置文件的继承与依赖机制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: