Наследование конфигурации Spring bean

Наследование конфигурации Spring bean

В Spring наследование поддерживается в конфигурации бина, чтобы бин мог использовать общие значения, свойства или конфигурации.

Дочерний компонент или унаследованный компонент может наследовать конфигурации, свойства и некоторые атрибуты родительского компонента. Кроме того, дочерние компоненты могут переопределять унаследованное значение.

В следующем полном примере показано, как работает наследование конфигурации бина в Spring.

package com.example.common;

public class Customer {

    private int type;
    private String action;
    private String Country;

    //...

}

Файл конфигурации бина



    
        
    

    
        
        
    

Выше bean-компонент «BaseCustomerMalaysia» содержит значение «Малайзия» для свойства страны, а «CustomerBean» унаследовал это значение от своего родительского объекта («BaseCustomerMalaysia»).

Запустить его

package com.example.common;

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

public class App
{
    public static void main( String[] args )
    {
        ApplicationContext context =
            new ClassPathXmlApplicationContext("SpringBeans.xml");

        Customer cust = (Customer)context.getBean("CustomerBean");
        System.out.println(cust);

    }
}

выход

Customer [type=1, action=buy, Country=Malaysia]

Компонент «CustomerBean» только что унаследовал свойство страны от своего родителя («BaseCustomerMalaysia»).

Наследование с аннотацией

В приведенном выше примере «BaseCustomerMalaysia» все еще может создавать, например,

    Customer cust = (Customer)context.getBean("BaseCustomerMalaysia");

Если вы хотите сделать этот базовый компонент в качестве шаблона и не позволять другим создавать его экземпляры, вы можете добавить атрибут «abstract» в элемент . Например



    
        
    

    
        
        
    

Теперь bean-компонент «BaseCustomerMalaysia» является чистым шаблоном, и боб наследует его только, если вы попытаетесь создать его экземпляр, вы увидите следующее сообщение об ошибке.

    Customer cust = (Customer)context.getBean("BaseCustomerMalaysia");
org.springframework.beans.factory.BeanIsAbstractException:
    Error creating bean with name 'BaseCustomerMalaysia':
    Bean definition is abstract

Шаблон чистого наследования

На самом деле, родительский компонент не является обязательным для определения атрибута класса, часто вам может просто понадобиться общее свойство для совместного использования. Вот пример



    
        
    

    

        
        
    

В этом случае bean-компонент «BaseCustomerMalaysia» является чистым шаблоном, предназначенным только для совместного использования свойства «страны».

Переопределить это

Однако вы все еще можете переопределить унаследованное значение, указав новое значение в дочернем компоненте. Давайте посмотрим на этот пример



    
        
    

    
        
        
        
    

Компонент «CustomerBean» просто переопределяет свойство страны-родителя («BaseCustomerMalaysia») от «Малайзии» до «Японии».

Customer [Country=Japan, action=buy, type=1]

Заключение

Наследование конфигурации bean-компонента Spring очень полезно, чтобы избежать повторения общего значения или конфигурации для нескольких bean-компонентов.

Скачать исходный код

Скачать -Spring-Bean-Inheritance-Example.zip (5 КБ)