方法级的弹簧轮廓?

2022-09-01 00:23:44

我想介绍一些仅在开发过程中执行的方法。

我想我可能会在这里使用注释?但是,如何在类级别应用此注释,以便仅在属性中配置特定配置文件时才调用此方法?Spring @Profile

spring.profiles.active=dev

将以下内容作为伪代码。如何做到这一点?

class MyService {

    void run() { 
       log();
    }

    @Profile("dev")
    void log() {
       //only during dev
    }
}

答案 1

对于不想用 多个注释的未来读者,这也可能是一个解决方案:@Beans@Profile

class MyService {

   @Autowired
   Environment env;

   void run() { 
      if (Arrays.asList(env.getActiveProfiles()).contains("dev")) {
         log();
      }
   }

   void log() {
      //only during dev
   }
}

答案 2

您可以在 http://docs.spring.io/spring/docs/3.1.x/javadoc-api/org/springframework/context/annotation/Profile.html 上阅读

@Profile注释可以以下列任何方式使用:

作为直接或间接使用 @Component 注释的任何类(包括作为元注释的@Configuration类)上的类型级批注,以便编写自定义构造型批注 如果@Configuration类使用@Profile标记,则将绕过与该类关联的所有@Bean方法和@Import批注,除非一个或多个指定的配置文件处于活动状态。 这与Spring XML中的行为非常相似:如果提供了beans元素的profile属性,例如,除非配置文件'p1'和/或'p2'已被激活,否则beans元素将不会被解析。同样,如果@Component或@Configuration类标有@Profile({“p1”,“p2”}),则除非已激活配置文件“p1”和/或“p2”,否则将不会注册/处理该类。

因此,类上的@Profile注释会连接到它的所有方法和导入。不上课。

您尝试执行的操作可能通过拥有两个实现相同接口的类来实现,并根据配置文件注入一个或另一个类。看看这个问题的答案。

注释驱动的依赖注入,可处理不同的环境


推荐