Spring学习笔记5 - Bean定义继承

本文内容纲要:Spring学习笔记5 - Bean定义继承

bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息。

例如初始化方法,静态工厂方法名等等。

子bean的定义继承父定义的配置数据。子定义可以根据需要重写一些值,或添加其他值(与Java类的继承概念一致)。

当使用基于XML的配置元数据时,通过使用父属性,指定父bean作为该属性的值来表明子bean的定义。

示例:

1 <?xml version="1.0" encoding="UTF-8"?>

2 <beans xmlns="http://www.springframework.org/schema/beans"

3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:schemaLocation="http://www.springframework.org/schema/beans

5 http://www.springframework.org/schema/beans/spring-beans.xsd">

6

7 <bean id="helloWorld" class="com.microyum.HelloWorldExtend">

8 <property name="message1" value="Hello First World" />

9 <property name="message2" value="Hello Second World" />

10 </bean>

11

12 <bean id="helloIndia" class="com.microyum.HelloIndiaExtend" parent="helloWorld">

13 <property name="message1" value="Hello First India" />

14 <property name="message3" value="Hello Third India" />

15 </bean>

16 </beans>

beanExtend.xml

1 public class HelloWorldExtend {

2 private String message1;

3 private String message2;

4

5 public void getMessage1() {

6 System.out.println("World Message1:" + message1);

7 }

8

9 public void setMessage1(String message1) {

10 this.message1 = message1;

11 }

12

13 public void getMessage2() {

14 System.out.println("World Message2:" + message2);

15 }

16

17 public void setMessage2(String message2) {

18 this.message2 = message2;

19 }

20

21 }

HelloWorldExtend.java

1 public class HelloIndiaExtend {

2 private String message1;

3 private String message2;

4 private String message3;

5

6 public void getMessage1() {

7 System.out.println("India Message1: " + message1);

8 }

9

10 public void setMessage1(String message1) {

11 this.message1 = message1;

12 }

13

14 public void getMessage2() {

15 System.out.println("India Message2: " + message2);

16 }

17

18 public void setMessage2(String message2) {

19 this.message2 = message2;

20 }

21

22 public void getMessage3() {

23 System.out.println("India Message3: " + message3);

24 }

25

26 public void setMessage3(String message3) {

27 this.message3 = message3;

28 }

29

30 }

HelloIndiaExtend.java

1 import org.springframework.context.ApplicationContext;

2 import org.springframework.context.support.ClassPathXmlApplicationContext;

3

4 public class MainAppExtend {

5 public static void main(String[] args) {

6 ApplicationContext context = new ClassPathXmlApplicationContext(

7 "beanExtend.xml");

8

9 HelloWorldExtend objA = (HelloWorldExtend) context

10 .getBean("helloWorld");

11 objA.getMessage1();

12 objA.getMessage2();

13

14 HelloIndiaExtend objB = (HelloIndiaExtend) context

15 .getBean("helloIndia");

16 objB.getMessage1();

17 objB.getMessage2();

18 objB.getMessage3();

19 }

20 }

MainAppExtend.java

输出结果:

World Message1:Hello First World

World Message2:Hello Second World

India Message1: Hello First India

India Message2: Hello Second World

India Message3: Hello Third India

这里可以观察到,在beanExtend.xml文件中,创建"helloIndia"bean的同时并没有传递message2,但由于Bean定义了继承,所有这里传递了message2

Bean定义模板

你可以创建一个Bean定义模板,不需要花太多功夫它就可以被其他子bean定义使用。

在定义一个Bean定义模板时,你不应该指定类的属性,而应该指定带true值的抽象属性

如下所示:

1 <?xml version="1.0" encoding="UTF-8"?>

2 <beans xmlns="http://www.springframework.org/schema/beans"

3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

4 xsi:schemaLocation="http://www.springframework.org/schema/beans

5 http://www.springframework.org/schema/beans/spring-beans.xsd">

6

7 <bean id="beanTemplate" abstract="true">

8 <property name="message1" value="Hello World" />

9 <property name="message2" value="Hello Second World" />

10 <property name="message3" value="Namaste India" />

11 </bean>

12

13 <bean id="helloIndia" class="com.microyum.HelloIndiaExtend" parent="beanTemplate">

14 <property name="message1" value="Hello India" />

15 <property name="message3" value="Namaste India" />

16 </bean>

17 </beans>

beanTemplate.xml

父bean自身不能被实例化,因为它是不完整的,而且它也被明确地标记为抽象的。

当一个定义是抽象的,它仅仅作为一个纯粹的模板bean定义来使用,充当子定义的父定义使用。

示例:

1 public class MainAppExtend {

2 public static void main(String[] args) {

3 ApplicationContext context = new ClassPathXmlApplicationContext(

4 "beanTemplate.xml");

5

6 // HelloWorldExtend objA = (HelloWorldExtend) context

7 // .getBean("helloWorld");

8 // objA.getMessage1();

9 // objA.getMessage2();

10

11 HelloIndiaExtend objB = (HelloIndiaExtend) context

12 .getBean("helloIndia");

13 objB.getMessage1();

14 objB.getMessage2();

15 objB.getMessage3();

16 }

17 }

MainAppExtend.java

输出结果:

India Message1: Hello India

India Message2: Hello Second World

India Message3: Namaste India

本文内容总结:Spring学习笔记5 - Bean定义继承

原文链接:https://www.cnblogs.com/microyum/p/6903078.html

以上是 Spring学习笔记5 - Bean定义继承 的全部内容, 来源链接: utcz.com/z/362560.html

回到顶部