Расширенная тема Spring4.x (4): условная аннотация @Conditional

задняя часть Linux API Windows

1. Последний штрих

существуетОбщая конфигурация Spring4.x (4): профиль Springзнать, благодаря деятельностиprofileможно получить разныеBean.Spring4обеспечивает более общее состояние на основеBeanсоздается, т.е. с использованием@Conditionalаннотация.

@ConditionalСоздайте конкретныйBean. Например, когда определенныйjarКогда пакет находится в определенном пути к классам, один или несколько настраиваются автоматически.Bean; или только определенныйBeanсоздан для создания другогоBean. Как правило, он управляется в соответствии с конкретными условиямиBeanПоведение при создании, чтобы мы могли использовать эту функцию для автоматической настройки.

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

Следующие примеры будут зависеть от разных операционных систем и будут реализованыConditionинтерфейс и переопределить егоmatchesметод построения условий суждения. если вWindowsЗапустите программу под системой, команда вывода спискаdir; если вLinuxЗапустите программу под операционной системой, команда вывода спискаls.

2. Примеры

1. Определение условий суждения

1.1 Условия определения Windows

package org.light4j.sping4.senior.conditional;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class WindowsCondition implements Condition {

    public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata) {
        return context.getEnvironment().getProperty("os.name").contains("Windows");
    }
}

1.2 Условия для определения Linux

package org.light4j.sping4.senior.conditional;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

public class LinuxCondition implements Condition {

    public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata) {
        return context.getEnvironment().getProperty("os.name").contains("Linux");
    }
}

2. Классы бинов в разных системах

2.1 Интерфейс

package org.light4j.sping4.senior.conditional;

public interface ListService {
    public String showListCmd();
}

2.2 Класс Bean для создания под Windows

package org.light4j.sping4.senior.conditional;

public class WindowsListService implements ListService {

    @Override
    public String showListCmd() {
        return "dir";
    }
}

2.3 Класс Bean, который будет создан под Linux

package org.light4j.sping4.senior.conditional;

public class LinuxListService implements ListService{

    @Override
    public String showListCmd() {
        return "ls";
    }
}

3. Класс конфигурации

package org.light4j.sping4.senior.conditional;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConditionConifg {
    @Bean
    @Conditional(WindowsCondition.class) //①
    public ListService windowsListService() {
        return new WindowsListService();
    }

    @Bean
    @Conditional(LinuxCondition.class) //②
    public ListService linuxListService() {
        return new LinuxListService();
    }
}

Объяснение кода:

① пройти@ConditionalАннотация, соответствующаяWindowsусловие создаетсяwindowsListService.
② пройти@ConditionalАннотация, соответствующаяLinuxусловие создаетсяlinuxListService.

4. Беги

package org.light4j.sping4.senior.conditional;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConifg.class);

        ListService listService = context.getBean(ListService.class);

        System.out.println(context.getEnvironment().getProperty("os.name") + "系统下的列表命令为: " + listService.showListCmd());

        context.close();
    }
}

Моя система — Windows, и результат работы показан на следующем рисунке:
condition

5. Пример исходного кода:

githubадрес:Нажмите, чтобы просмотреть
Адрес облака кода:Нажмите, чтобы просмотреть

награда Добро пожаловать в публичный аккаунт Life Designer в WeChat.
Публичный идентификатор: longjiazuoA