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