博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring中Bean的定义继承
阅读量:6520 次
发布时间:2019-06-24

本文共 3918 字,大约阅读时间需要 13 分钟。

以下内容引用自:

Bean定义继承

bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。

子bean的定义继承父定义的配置数据。子定义可以根据需要重写一些值,或者添加其他值。

Spring Bean定义的继承与Java类的继承无关,但是继承的概念是一样的。你可以定义一个父bean作为模板和其他子bean就可以从父bean中继承所需的配置。

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

继承例子:

pom.xml:

4.0.0
com.jsoft.testspring
testbeandefinition
0.0.1-SNAPSHOT
jar
testbeandefinition
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
org.springframework
spring-core
4.1.4.RELEASE
org.springframework
spring-context
4.1.4.RELEASE

HelloWorld.java:

package com.jsoft.testspring.testbeandefinition;public class HelloWorld {    private String messageString1;        public void setMessage1(String message){        this.messageString1 = message;    }        public void getMessage1(){        System.out.println(this.messageString1);    }        private String messageString2;    public void getMessage2() {        System.out.println(this.messageString2);    }    public void setMessage2(String messageString2) {        this.messageString2 = messageString2;    }}

HelloIndia.java:

package com.jsoft.testspring.testbeandefinition;public class HelloIndia {    private String messageString1;        public void setMessage1(String message){        this.messageString1 = message;    }        public void getMessage1(){        System.out.println(this.messageString1);    }        private String messageString2;    public void getMessage2() {        System.out.println(this.messageString2);    }    public void setMessage2(String messageString2) {        this.messageString2 = messageString2;    }        private String messageString3;    public void getMessage3() {        System.out.println(this.messageString3);    }    public void setMessage3(String messageString3) {        this.messageString3 = messageString3;    }}

beans.xml:

在该配置文件中我们定义有两个属性message1和message2的“helloWorld”bean。然后,使用parent属性把“helloIndia”bean定义为“helloWorld”bean的孩子。这个子bean继承message2的属性,重写message1的属性,并且引入一个属性message3。

App.java:

package com.jsoft.testspring.testbeandefinition;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Hello world! * */public class App {    public static void main( String[] args )    {        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");                HelloWorld helloWorld = (HelloWorld)applicationContext.getBean("helloWorld");        helloWorld.getMessage1();        helloWorld.getMessage2();                HelloIndia helloIndia = (HelloIndia)applicationContext.getBean("helloIndia");        helloIndia.getMessage1();        helloIndia.getMessage2();        helloIndia.getMessage3();    }}

运行结果:

可以观察到,我们创建“helloIndia”bean的同时并没有传递message2,但是由于Bean定义的继承,所以它传递了message2。

模板例子:

代码逻辑不变,只需要修改beans.xml,不用指定class属性,指定带true值的abstract属性即可。

父bean自身不能被实例化,因为它是不完整的,而且它也被明确地标记为抽象(abstract)的。当一个定义是抽象的,它仅仅作为一个纯粹的模板bean定义来使用的,充当子定义的父定义使用。

 

测试工程:

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

转载地址:http://dwgfo.baihongyu.com/

你可能感兴趣的文章