Spring Bean继承、抽象、依赖

版权声明:最终解释权归属Hern、HernSong(hernsong)、苍鹭、www.hernsong.com所有! https://blog.csdn.net/qq_36761831/article/details/88076429

定义

bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,容器的具体信息例如初始化方法,静态工厂方法名,等等。子bean的定义继承副定义的配置数据。子定义可以根据需要重写一些值,或者添加其他值。

Spring Bean定义的继承与Java类的继承无关,但是继承的概念是一样的。可以定义一个父Bean的定义作为模板和其他子Bean就可以从父Bean中继承所需的配置,包括Bean的属性配置。当使用基于XML的配置元数据时,通过使用父属性,指定父Bean作为该属性的值来表明自bean的定义。父Bean(abstract)自身不能被实例化,因为它是不完整的,而且它也被明确地标记为抽象的。当一个定义是抽象的,它仅仅作为一个纯粹的模板Bean定义来使用,充当子定义的父定义使用。

父 Bean 可以作为配置模板, 也可以作为 Bean 实例。若只想把父 Bean 作为模板, 可以设置 <bean> 的abstract 属性为 true, 这样 Spring 将不会实例化这个 Bean 。并不是 <bean> 元素里的所有属性都会被继承,例如: autowire, abstract 等。也可以忽略父 Bean 的 class 属性, 让子 Bean 指定自己的类, 而共享相同的属性配置, 但此时 abstract 必须设为 true。

例如:

package com.spring.auto.autowire;

public class Parent {
    public String getParentName() {
        return parentName;
    }

    public void setParentName(String parentName) {
        this.parentName = parentName;
    }

    private String parentName;
}
<bean id="parent" class="com.spring.auto.autowire.Parent"></bean>
    <bean id="parent2" parent="parent" p:parentName="szh"/>
package com.spring.auto.autowire;

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

public class Test {

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/spring/auto/autowire/spring_autowire.xml");

        Parent parent = (Parent) applicationContext.getBean("parent2");
        System.out.println(parent.getParentName());
    }
}

抽象样例

方式一
<bean id="parent" p:parentName="抽象" abstract="true"></bean>
    <bean id="parent2" class="com.spring.auto.autowire.Parent" parent="parent" p:parentName="抽象实现"></bean>

方式二(建议采用该方式)
    <bean id="parent" abstract="true">
        <property name="parentName">
            <value></value>
        </property>
    </bean>

    <bean id="parent2" class="com.spring.auto.autowire.Parent" parent="parent">
        <property name="parentName">
            <value>抽象类实现</value>
        </property>
    </bean>

依赖

 Spring 允许用户通过 depends-on 属性设定 Bean 前置依赖的Bean,前置依赖的 Bean 会在本 Bean 实例化之前创建好 。如果前置依赖于多个 Bean,则可以通过逗号,空格或的方式配置 Bean 的名称。

public class Person {
    private String name;
    private Car car;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Car getCar() {
        return car;
    }
    public void setCar(Car car) {
        this.car = car;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", car=" + car + "]";
    }
}
<bean id="cat" class="com.spring.auto.autowire.Cat" p:name="猫"></bean>
    <bean id="dog" class="com.spring.auto.autowire.Dog"></bean>
    <bean id="test" class="com.spring.auto.autowire.Person" depends-on="cat" p:say="dsf">
    </bean>

猜你喜欢

转载自blog.csdn.net/qq_36761831/article/details/88076429