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, и результат работы показан на следующем рисунке:
5. Пример исходного кода:
награда Добро пожаловать в публичный аккаунт Life Designer в WeChat.
githubадрес:Нажмите, чтобы просмотреть
Адрес облака кода:Нажмите, чтобы просмотреть
Публичный идентификатор: longjiazuoA