• Spring点滴六:Spring中定义bean的继承


         在基于XML配置元数据中,bean标签可以包含很多配置信息,可以包含构造函数的参数,属性值以及其他一些初始化方法。子bean的定义可以继承父bean定义元数据,子bean定义可以根据需要重写父bean属性值或者添加一些其他属性。

         Spring bean中的继承和Java中继承无关,只是继承的思想一致。可以把父bean作为一个定义模板,供其他子bean使用。

    示例:

    spring-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="parent" class="com.test.spring.Parent"> <property name="message1" value="This is parent message1"></property> <property name="message2" value="This is parent message2"></property> </bean>
    <!-- 使用parent属性来引用父bean --> <bean id="children" class="com.test.spring.Children" parent="parent">
    <!-- 直接引用父bean中message1属性--> <property name="message1" value="This is parent message1"></property>
    <!-- 重写父bean中message2属性--> <property name="message2" value="This is children message2"></property>
    <!-- 子bean中添加了message3属性--> <property name="message3" value="This is children message3"></property> </bean> </beans>

    Java 类:

    package com.test.spring;
    
    public class Parent {
        private String message1;
        private String message2;
    
        public String getMessage1() {
            return message1;
        }
    
        public void setMessage1(String message1) {
            this.message1 = message1;
        }
    
        public String getMessage2() {
            return message2;
        }
    
        public void setMessage2(String message2) {
            this.message2 = message2;
        }
    
        @Override
        public String toString() {
            return "Parent [message1=" + message1 + ", message2=" + message2 + "]";
        }
    
    }
    ----------------------------------------------------------------------------------------------------------------------------------------------------- package com.test.spring; public class Children { private String message1; private String message2; private String message3; public String getMessage1() { return message1; } public void setMessage1(String message1) { this.message1 = message1; } public String getMessage2() { return message2; } public void setMessage2(String message2) { this.message2 = message2; } public String getMessage3() { return message3; } public void setMessage3(String message3) { this.message3 = message3; } @Override public String toString() { return "Children [message1=" + message1 + ", message2=" + message2 + ", message3=" + message3 + "]"; } }

    测试:

    package com.test.spring;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class T {
        AbstractApplicationContext applicationcontext=null;
        @Before
        public void before() {
            System.out.println("》》》Spring ApplicationContext容器开始初始化了......");
            applicationcontext= new ClassPathXmlApplicationContext(new String[]{"test1-service.xml"});
            System.out.println("》》》Spring ApplicationContext容器初始化完毕了......");
        }
        @Test
        public void  test() {
            //BeanLifecycle beanLifecycle =applicationcontext.getBean("beanLifecycle",BeanLifecycle.class);
            //applicationcontext.close();
            //applicationcontext.registerShutdownHook();  
            Parent parent=applicationcontext.getBean(Parent.class);
            System.out.println(parent);
            Children children=applicationcontext.getBean("children", Children.class);
            System.out.println(children);
        }
    }

    测试结果:

    》》》Spring ApplicationContext容器开始初始化了......
    2017-03-19 12:54:55  INFO:ClassPathXmlApplicationContext-Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5facc36f: startup date [Sun Mar 19 12:54:55 CST 2017]; root of context hierarchy
    2017-03-19 12:54:55  INFO:XmlBeanDefinitionReader-Loading XML bean definitions from class path resource [test1-service.xml]
    》》》Spring ApplicationContext容器初始化完毕了......
    Parent [message1=This is parent message1, message2=This is parent message2]
    Children [message1=This is parent message1, message2=This is children message2, message3=This is children message3
  • 相关阅读:
    数据结构、算法、及线性表总结
    第二次博客作业: 函数+进制转换器v1.0beta
    c语言文件
    Oracle中Left Outer Join和外关联(+)的区别
    Oracle中trunc函数、round 函数、ceil函数和floor 函数的使用
    Oracle 表之间的连接 JOIN
    Oracle TRUNCATE语法
    使用Content editor webpart 为NewForm增加默认值
    Metadata serviceTaxonomyHiddenList 权限
    SQL server总是不能远程连接
  • 原文地址:https://www.cnblogs.com/sishang/p/6579868.html
Copyright © 2020-2023  润新知