创建bean取决于spring概要文件

bq8i3lrv  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(352)

我有个奇怪的问题。创建bean取决于spring配置文件。创建注解并在bean类上使用它。注解:

@Profile("dev")
public @interface Dev {
}

@Profile("prod")
public @interface Prod {
}

使用:

public interface Facade {
    String test();
}

@Dev
@Component("facade")
public class DevFacade implements Facade {
    public String test() {
        return "Dev";
    }
}

@Prod
@Component("facade")
public class ProdFacade implements Facade{
    public String test() {
        return "Prod";
    }
}

在SpringBootVersion2.1.18.release之前,它可以正常工作。当我设置 spring.profiles.active=dev 我只买豆子 DevFacade . 但是在2.2.0.release上面,它不起作用,我得到了 Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'facade' for bean class [com.example.demo.test.ProdFacade] conflicts with existing, non-compatible bean definition of same name and class [com.example.demo.test.DevFacade] . 这意味着spring为dev和prod profile创建了两个bean,但为什么呢?当我修改类并使用 @Profile("dev") 而不是 @Dev 它起作用了。
有人知道为什么吗?

57hvy0tb

57hvy0tb1#

用户保留注解@保留(retentionpolicy.runtime)

@Retention(RetentionPolicy.RUNTIME)
@Profile("dev")
  public @interface Dev {
}

@Retention(RetentionPolicy.RUNTIME)
@Profile("prod")
  public @interface Prod {
}

相关问题