> Java > java지도 시간 > Spring Boot의 조건부 판단 소개(코드 포함)

Spring Boot의 조건부 판단 소개(코드 포함)

不言
풀어 주다: 2019-04-11 13:14:08
앞으로
3607명이 탐색했습니다.

이 기사에서는 Spring Boot의 조건부 판단(코드 포함)에 대해 소개합니다. 필요한 참고가 될 수 있는 내용이길 바랍니다.

Spring Boot의 조건부

spring boot는 프로젝트의 컨테이너에 빈을 매우 편리하게 추가할 수 있는 풍부한 조건부 세트를 제공합니다. 이 문서에서는 주로 각 주석을 설명하고 코드와 함께 사용하는 방법을 보여줍니다.

모든 ConditionalOnXXX 주석은 클래스 또는 메서드에 배치될 수 있습니다. 메서드가 클래스에 있는 경우 클래스의 모든 @Bean 주석이 달린 메서드가 실행되는지 여부를 결정합니다.

@Conditional

아래의 다른 조건부 주석은 다음 방법을 통해 ConditionalOnXXX를 사용자 정의할 수 있으며, Conditional 인터페이스를 구현하는 클래스 배열을 받습니다.

public @interface Conditional {
    Class extends Condition>[] value();
}
로그인 후 복사
로그인 후 복사
Condition 인터페이스에는 일치 결과를 반환하는 match 메서드가 하나만 있습니다.

public interface Condition {
    boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}
로그인 후 복사
로그인 후 복사
빈을 구성하려면 운영체제를 통해 조건을 구성하세요. Window를 사용하면 Bill의 Person 객체가 인스턴스화되고, Linux를 사용하면 Linus의 Person 객체가 인스턴스화됩니다.

//LinuxCondition,为方便起见,去掉判断代码,直接返回true了
public class LinuxCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return true;
    }
}
로그인 후 복사
로그인 후 복사
//WindowsCondition,为方便起见,去掉判断代码,直接返回false了
public class WindowsCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata metadata) {
        return false;
    }
}
로그인 후 복사
로그인 후 복사
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String name;
    private Integer age;
}
로그인 후 복사
로그인 후 복사
//配置类
@Configuration
public class BeanConfig {

    @Bean(name = "bill")
    @Conditional({WindowsCondition.class})
    public Person person1(){
        return new Person("Bill Gates",62);
    }

    @Bean("linus")
    @Conditional({LinuxCondition.class})
    public Person person2(){
        return new Person("Linus",48);
    }
}
로그인 후 복사
로그인 후 복사
public class AppTest {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);

    @Test
    public void test(){
        String osName = applicationContext.getEnvironment().getProperty("os.name");
        System.out.println("当前系统为:" + osName);
        Map<string> map = applicationContext.getBeansOfType(Person.class);
        System.out.println(map);
    }
}</string>
로그인 후 복사
로그인 후 복사
출력 결과:

현재 시스템은 다음과 같습니다. Mac OS Bean 개체는 구성 중에 사용됩니다. 컴퓨터 인스턴스가 없는 것으로 확인되면 백업 컴퓨터가 인스턴스화됩니다.
@Data
@AllArgsConstructor
@ToString
public class Computer {
    private String name;
}
로그인 후 복사
로그인 후 복사
@Configuration
public class BeanConfig {
    @Bean(name = "notebookPC")
    public Computer computer1(){
        return new Computer("笔记本电脑");
    }

    @ConditionalOnMissingBean(Computer.class)
    @Bean("reservePC")
    public Computer computer2(){
        return new Computer("备用电脑");
    }
}
로그인 후 복사
로그인 후 복사
public class TestApp {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
    @Test
    public void test1(){
        Map<string> map = applicationContext.getBeansOfType(Computer.class);
        System.out.println(map);
    }
}</string>
로그인 후 복사
로그인 후 복사

BeanConfig를 수정하세요. 첫 번째 @Bean을 주석 처리하면 백업 컴퓨터가 인스턴스화되고, 그렇지 않으면 백업 컴퓨터가 인스턴스화되지 않습니다.

@ConditionalOnClass & @ConditionalOnMissingClass

이 주석은 지정된 클래스가 있는지 확인합니다. 클래스 경로 , 처음 봤을 때 헷갈렸는데, 클래스 경로에 지정된 클래스가 없으면 컴파일이 통과되지 않습니다... 이는 주로 동일한 기능을 가진 타사 구성 요소를 통합하는 데 사용됩니다. 클래스 경로에 컴포넌트가 있으므로 자동 구성이 수행됩니다. 예를 들어 Spring Boot 웹에서는 Velocity, Thymeleaf 또는 freemaker를 사용하여 뷰 구성 요소를 자동으로 구성할 때 이 방법을 사용합니다.

예는 갑옷 A(라이트 슈트)와 B(다크 슈트) 2세트입니다. A가 없으면 B를 구성합니다.

public interface Fighter {
    void fight();
}
public class FighterA implements Fighter {
    @Override
    public void fight() {
        System.out.println("使用光明套装");
    }
}
public class FighterB implements Fighter {
    @Override
    public void fight() {
        System.out.println("使用暗黑套装");
    }
}
로그인 후 복사
로그인 후 복사
Van은 사무라이이며 전투에 슈트를 사용합니다.

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Van {
    private Fighter fighter;
    public void fight(){
        fighter.fight();
    }
}
로그인 후 복사
로그인 후 복사

VanConfigA/B는 사무라이를 인스턴스화합니다

@Configuration
@ConditionalOnClass({FighterA.class})
public class VanConfigA {
    @Primary
    @Bean
    public Van vanA(){
        return new Van(new FighterA());
    }
}
@Configuration
@ConditionalOnClass({FighterB.class})
public class VanConfigB {
    @Bean
    public Van vanB(){
        return new Van(new FighterB());
    }
}
로그인 후 복사
로그인 후 복사

테스트 클래스, 기본적으로 슈트 AB가 클래스 경로에 있으면 두 세트가 모두 로드되고 A는 다음으로 설정됩니다. PRIMARY, 대상 클래스에서 FightA.class가 삭제되면 슈트 B만 로드됩니다.
@SpringBootApplication
public class TestApp implements CommandLineRunner {
    @Autowired
    private Van van;
    public static void main(String[] args) {
        SpringApplication.run(TestApp.class, args);
    }
    @Override
    public void run(String... args) throws Exception {
        //do something
       van.fight();
    }
}
로그인 후 복사
로그인 후 복사

또한 두 개의 VanConfigA/B를 병합하고 메서드에 ConditionalOnClass 주석을 추가해 보세요. 패키지를 삭제하면 오류가 발생합니다.

@ConditionalOnExpress

이 함수는 대부분의 경우 @ConditionalOnProperty와 함께 사용할 수 있습니다. SpEL을 사용할 수 있으므로 표현식이 더 유연해집니다. 예제에서는 속성의 test.enabled 값을 판단합니다. BeanConfig는 각각 Boolean, string, number 세 가지 유형을 판단합니다. 다른 많은 방법을 시도했지만 ==를 직접 사용하는 등 아무것도 작동하지 않습니다. 구성된 속성이 문자열로 처리되는 것 같습니다.

@Data
public class TestBean {
    private String name;
}
로그인 후 복사
로그인 후 복사
@Configuration
@ConditionalOnExpression("#{${test.enabled:true} }")
//@ConditionalOnExpression("'zz'.equalsIgnoreCase('${test.name2}')")
//@ConditionalOnExpression("new Integer('${test.account}')==1")
public class BeanConfig {
    @Bean
    public TestBean testBean(){
        return new TestBean("我是美猴王");
    }
}
로그인 후 복사
로그인 후 복사
@SpringBootApplication
public class TestAppCommand implements CommandLineRunner {
    @Autowired
    private TestBean testBean;

    public static void main(String[] args) {
        SpringApplication.run(TestAppCommand.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(testBean.getName());
    }
}
로그인 후 복사
로그인 후 복사

@ConditionalOnProperty

는 단일 속성에 대한 조건부 판단에 적합한 반면, 위의 @ConditionalOnExpress는 여러 속성의 연관 비교와 같은 보다 복잡한 상황에 적합합니다. 이번 예시도 기본 조건부 판단 3가지를 제시하고 있는데 모두 문자열로 처리할 수 있을 것 같네요...

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestBean {
    private String name;
}
로그인 후 복사
로그인 후 복사
@Configuration
@ConditionalOnProperty(prefix = "test", name="enabled", havingValue = "true",matchIfMissing = false)
//@ConditionalOnProperty(prefix = "test", name="account", havingValue = "1",matchIfMissing = false)
//@ConditionalOnProperty(prefix = "test", name="name1", havingValue = "zz",matchIfMissing = false)
public class BeanConfig {

    @Bean
    public TestBean testBean(){
        return new TestBean("我是美猴王");
    }
}
로그인 후 복사
로그인 후 복사
@SpringBootApplication
public class TestAppCommand implements CommandLineRunner {
    @Autowired
    private TestBean testBean;
    public static void main(String[] args) {
        SpringApplication.run(TestAppCommand.class, args);
    }
    @Override
    public void run(String... args) throws Exception {
        System.out.println(testBean.getName());

    }
}
로그인 후 복사
로그인 후 복사

@ConditionalOnJava

자바 버전으로 판단할 수 있습니다.

@Data
public class TestBean {
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
@Configuration
@ConditionalOnJava(JavaVersion.EIGHT)
public class BeanConfig {

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }
}
로그인 후 복사
로그인 후 복사
public class TestApp {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);
    @Test
    public void test(){
        Map<string> map = context.getBeansOfType(TestBean.class);
        System.out.println(map);
    }
}</string>
로그인 후 복사
로그인 후 복사

@ConditionalOnResource

ehcache.properties를 판단하여 ehcache 구성 요소를 자동으로 어셈블할지 여부를 결정하는 등 지정된 리소스 파일이 존재하는지 여부에 따른 조건부 판단입니다.

@Data
public class TestBean {
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
@Configuration
@ConditionalOnResource(resources = "classpath:application.yml")
public class BeanConfig {

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }
}
로그인 후 복사
로그인 후 복사
public class TestApp {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);

    @Test
    public void test(){
        Map<string> map = context.getBeansOfType(TestBean.class);
        System.out.println(map);
    }
}</string>
로그인 후 복사
로그인 후 복사

@ConditionalOnSingleCandidate

아직 적용 시나리오를 생각하지 못했습니다. 조건을 통과하는 조건은 다음과 같습니다. 1. 해당 Bean 컨테이너가 하나만 있습니다. 2. 해당 Bean이 여러 개 있지만 PRIMARY가 공식화되었습니다. 예제에서는 BeanB를 어셈블할 때 BeanA의 어셈블리 상태를 확인해야 하므로 BeanBConfig는 BeanAConfig 이후에 순위가 지정되어야 합니다. BeanAConfig를 수정하고 @Primary 주석을 제거하거나 세 개의 @Bean 주석을 제거하면 BeanB는 그렇지 않습니다. 인스턴스화되었습니다.

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BeanA {
    private String name;
}
로그인 후 복사
로그인 후 복사
@Configuration
public class BeanAConfig {

    @Bean
    @Primary
    public BeanA bean1(){
        return new BeanA("bean1");
    }
    @Bean(autowireCandidate = false)
    public BeanA bean2(){
        return new BeanA("bean2");
    }
    //@Bean(autowireCandidate = false)
    public BeanA bean3(){
        return new BeanA("bean3");
    }
}
로그인 후 복사
로그인 후 복사
@Data
public class BeanB {
}
로그인 후 복사
로그인 후 복사
@Configuration
@AutoConfigureAfter(BeanAConfig.class)
@ConditionalOnSingleCandidate(BeanA.class)
public class BeanBConfig {

    @Bean
    public BeanB targetBean(){
        return new BeanB();
    }
}
로그인 후 복사
로그인 후 복사
public class TestApp {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanAConfig.class, BeanBConfig.class);

    @Test
    public void test(){
        Map<string> map = context.getBeansOfType(BeanA.class);
        System.out.println(map);
        Map<string> map2 = context.getBeansOfType(BeanB.class);
        System.out.println(map2);
    }
}</string></string>
로그인 후 복사
로그인 후 복사

@ConditionalOnNotWebApplication & @ConditionalOnWebApplication

현재 환경이 웹 애플리케이션인지 확인합니다.

Column

기사 세부정보






저자 팔로우注                                                                                                                   O Spring Boot 판단의 조건



~ ~                                                                                                                                                                                                                                                                                                        O oSpring Boot의 Conditional

spring Boot는 풍부한 조건부를 제공하여 프로젝트의 컨테이너에 Bean을 추가하는 데 매우 편리합니다. 이 문서에서는 주로 각 주석을 설명하고 코드와 함께 사용하는 방법을 보여줍니다. 모든 ConditionalOnXXX 주석은 클래스 또는 메서드에 배치될 수 있습니다. 메서드가 클래스에 있는 경우 클래스의 모든 @Bean 주석이 달린 메서드가 실행되는지 여부를 결정합니다. @Conditional아래의 다른 조건부 주석은 다음 방법을 통해 ConditionalOnXXX를 사용자 정의할 수 있으며, Conditional 인터페이스를 구현하는 클래스 배열을 받습니다.

public @interface Conditional {
    Class extends Condition>[] value();
}
로그인 후 복사
로그인 후 복사
Condition 인터페이스에는 일치 결과를 반환하는 match 메서드가 하나만 있습니다.
public interface Condition {
    boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}
로그인 후 복사
로그인 후 복사
빈을 구성하려면 운영체제를 통해 조건을 구성하세요. Window를 사용하면 Bill의 Person 객체가 인스턴스화되고, Linux를 사용하면 Linus의 Person 객체가 인스턴스화됩니다. 출력 결과:

현재 시스템은 다음과 같습니다. Mac OS Bean 개체는 구성 중에 사용됩니다. 컴퓨터 인스턴스가 없는 것으로 확인되면 백업 컴퓨터가 인스턴스화됩니다.

@Data
@AllArgsConstructor
@ToString
public class Computer {
    private String name;
}
로그인 후 복사
로그인 후 복사
@Configuration
public class BeanConfig {
    @Bean(name = "notebookPC")
    public Computer computer1(){
        return new Computer("笔记本电脑");
    }

    @ConditionalOnMissingBean(Computer.class)
    @Bean("reservePC")
    public Computer computer2(){
        return new Computer("备用电脑");
    }
}
로그인 후 복사
로그인 후 복사
public class TestApp {
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class);
    @Test
    public void test1(){
        Map<string> map = applicationContext.getBeansOfType(Computer.class);
        System.out.println(map);
    }
}</string>
로그인 후 복사
로그인 후 복사

BeanConfig를 수정하세요. 첫 번째 @Bean을 주석 처리하면 백업 컴퓨터가 인스턴스화되고, 그렇지 않으면 백업 컴퓨터가 인스턴스화되지 않습니다.

@ConditionalOnClass & @ConditionalOnMissingClass

이 주석은 지정된 클래스가 있는지 확인합니다. 클래스 경로 , 처음 봤을 때 헷갈렸는데, 클래스 경로에 지정된 클래스가 없으면 컴파일이 통과되지 않습니다... 이는 주로 동일한 기능을 가진 타사 구성 요소를 통합하는 데 사용됩니다. 클래스 경로에 컴포넌트가 있으므로 자동 구성이 수행됩니다. 예를 들어 Spring Boot 웹에서는 Velocity, Thymeleaf 또는 freemaker를 사용하여 뷰 구성 요소를 자동으로 구성할 때 이 방법을 사용합니다.

예는 갑옷 A(라이트 슈트)와 B(다크 슈트) 2세트입니다. A가 없으면 B를 구성합니다.

public interface Fighter {
    void fight();
}
public class FighterA implements Fighter {
    @Override
    public void fight() {
        System.out.println("使用光明套装");
    }
}
public class FighterB implements Fighter {
    @Override
    public void fight() {
        System.out.println("使用暗黑套装");
    }
}
로그인 후 복사
로그인 후 복사
Van은 사무라이이며 전투에 슈트를 사용합니다.

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Van {
    private Fighter fighter;
    public void fight(){
        fighter.fight();
    }
}
로그인 후 복사
로그인 후 복사

VanConfigA/B는 사무라이를 인스턴스화합니다

@Configuration
@ConditionalOnClass({FighterA.class})
public class VanConfigA {
    @Primary
    @Bean
    public Van vanA(){
        return new Van(new FighterA());
    }
}
@Configuration
@ConditionalOnClass({FighterB.class})
public class VanConfigB {
    @Bean
    public Van vanB(){
        return new Van(new FighterB());
    }
}
로그인 후 복사
로그인 후 복사

테스트 클래스, 기본적으로 슈트 AB가 클래스 경로에 있으면 두 세트가 모두 로드되고 A는 다음으로 설정됩니다. PRIMARY, 대상 클래스에서 FightA.class가 삭제되면 슈트 B만 로드됩니다.
@SpringBootApplication
public class TestApp implements CommandLineRunner {
    @Autowired
    private Van van;
    public static void main(String[] args) {
        SpringApplication.run(TestApp.class, args);
    }
    @Override
    public void run(String... args) throws Exception {
        //do something
       van.fight();
    }
}
로그인 후 복사
로그인 후 복사

또한 두 개의 VanConfigA/B를 병합하고 메서드에 ConditionalOnClass 주석을 추가해 보세요. 패키지를 삭제하면 오류가 발생합니다.

@ConditionalOnExpress

이 함수는 대부분의 경우 @ConditionalOnProperty와 함께 사용할 수 있습니다. SpEL을 사용할 수 있기 때문에 표현식이 더 유연해집니다. 예제에서는 속성의 test.enabled 값을 판단합니다. BeanConfig는 각각 Boolean, string, number 세 가지 유형을 판단합니다. 다른 많은 방법을 시도했지만 ==를 직접 사용하는 등 아무것도 작동하지 않습니다. 구성된 속성이 문자열로 처리되는 것 같습니다.

@Data
public class TestBean {
    private String name;
}
로그인 후 복사
로그인 후 복사
@Configuration
@ConditionalOnExpression("#{${test.enabled:true} }")
//@ConditionalOnExpression("'zz'.equalsIgnoreCase('${test.name2}')")
//@ConditionalOnExpression("new Integer('${test.account}')==1")
public class BeanConfig {
    @Bean
    public TestBean testBean(){
        return new TestBean("我是美猴王");
    }
}
로그인 후 복사
로그인 후 복사
@SpringBootApplication
public class TestAppCommand implements CommandLineRunner {
    @Autowired
    private TestBean testBean;

    public static void main(String[] args) {
        SpringApplication.run(TestAppCommand.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(testBean.getName());
    }
}
로그인 후 복사
로그인 후 복사
@ConditionalOnProperty
는 단일 속성에 대한 조건부 판단에 적합한 반면, 위의 @ConditionalOnExpress는 여러 속성의 연관 비교와 같은 보다 복잡한 상황에 적합합니다. 이번 예시도 기본 조건부 판단 3가지를 제시하고 있는데 모두 문자열로 처리할 수 있을 것 같네요...

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TestBean {
    private String name;
}
로그인 후 복사
로그인 후 복사
@Configuration
@ConditionalOnProperty(prefix = "test", name="enabled", havingValue = "true",matchIfMissing = false)
//@ConditionalOnProperty(prefix = "test", name="account", havingValue = "1",matchIfMissing = false)
//@ConditionalOnProperty(prefix = "test", name="name1", havingValue = "zz",matchIfMissing = false)
public class BeanConfig {

    @Bean
    public TestBean testBean(){
        return new TestBean("我是美猴王");
    }
}
로그인 후 복사
로그인 후 복사
@SpringBootApplication
public class TestAppCommand implements CommandLineRunner {
    @Autowired
    private TestBean testBean;
    public static void main(String[] args) {
        SpringApplication.run(TestAppCommand.class, args);
    }
    @Override
    public void run(String... args) throws Exception {
        System.out.println(testBean.getName());

    }
}
로그인 후 복사
로그인 후 복사

@ConditionalOnJava

자바 버전으로 판단할 수 있습니다.

@Data
public class TestBean {
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
@Configuration
@ConditionalOnJava(JavaVersion.EIGHT)
public class BeanConfig {

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }
}
로그인 후 복사
로그인 후 복사
public class TestApp {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);
    @Test
    public void test(){
        Map<string> map = context.getBeansOfType(TestBean.class);
        System.out.println(map);
    }
}</string>
로그인 후 복사
로그인 후 복사
@ConditionalOnResource

ehcache.properties를 판단하여 ehcache 구성 요소를 자동으로 어셈블할지 여부를 결정하는 등 지정된 리소스 파일이 존재하는지 여부에 따른 조건부 판단입니다.

@Data
public class TestBean {
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
@Configuration
@ConditionalOnResource(resources = "classpath:application.yml")
public class BeanConfig {

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }
}
로그인 후 복사
로그인 후 복사
public class TestApp {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanConfig.class);

    @Test
    public void test(){
        Map<string> map = context.getBeansOfType(TestBean.class);
        System.out.println(map);
    }
}</string>
로그인 후 복사
로그인 후 복사

@ConditionalOnSingleCandidate

这个还没有想到应用场景,条件通过的条件是:1 对应的bean容器中只有一个 2.对应的bean有多个,但是已经制定了PRIMARY。例子中,BeanB装配的时候需要看BeanA的装配情况,所以BeanBConfig要排在BeanAConfig之后.可以修改BeanAConfig,将@Primary注解去掉,或者把三个@Bean注解去掉,BeanB就不会实例化了。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BeanA {
    private String name;
}
로그인 후 복사
로그인 후 복사
@Configuration
public class BeanAConfig {

    @Bean
    @Primary
    public BeanA bean1(){
        return new BeanA("bean1");
    }
    @Bean(autowireCandidate = false)
    public BeanA bean2(){
        return new BeanA("bean2");
    }
    //@Bean(autowireCandidate = false)
    public BeanA bean3(){
        return new BeanA("bean3");
    }
}
로그인 후 복사
로그인 후 복사
@Data
public class BeanB {
}
로그인 후 복사
로그인 후 복사
@Configuration
@AutoConfigureAfter(BeanAConfig.class)
@ConditionalOnSingleCandidate(BeanA.class)
public class BeanBConfig {

    @Bean
    public BeanB targetBean(){
        return new BeanB();
    }
}
로그인 후 복사
로그인 후 복사
public class TestApp {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanAConfig.class, BeanBConfig.class);

    @Test
    public void test(){
        Map<string> map = context.getBeansOfType(BeanA.class);
        System.out.println(map);
        Map<string> map2 = context.getBeansOfType(BeanB.class);
        System.out.println(map2);
    }
}</string></string>
로그인 후 복사
로그인 후 복사

@ConditionalOnNotWebApplication & @ConditionalOnWebApplication

判断当前环境是否是Web应用。

  • Spring Boot의 조건부 판단 소개(코드 포함)


你可能感兴趣的



评论                                                    



载入中...

显示更多评论


위 내용은 Spring Boot의 조건부 판단 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿