【问题标题】:Change method based on environment根据环境改变方法
【发布时间】:2018-05-11 15:00:17
【问题描述】:

如何根据环境在两个同名方法调用之间切换?

我知道这可以在类级别使用@Profile 完成,但是有没有办法在方法级别做到这一点?所以理想情况下,我想要类似下面的 sn-p 的东西。

示例

public class Foo {

    @Profile('local')
    public void bar() {...}

    @Profile('prod')
    public void bar() {...}

【问题讨论】:

  • 没有。只需创建 2 个 bean 实例,在其前面放置一个接口,然后使用基于 @Profile 的 2 个实现中的 1 个。

标签: java spring


【解决方案1】:

由于 Spring 4.x 新版本可以通过 @Profile 方法级别的注释直接控制配置文件。

...作为任何@Bean 方法的方法级注释

就我个人而言,我不使用方法级别的配置文件,请在Is Spring's @Profile on methods a good practice?阅读更多内容


在你的情况下,我宁愿建议你以下方法:

创建两个类,实现通用接口。

public interface Foo {
    public void bar();
}

根据环境用@Profile注释每个。

@Component
@Profile("local")
public class LocalFoo implements Foo {

    @Override
    public void bar() { ... }
}

@Component
@Profile("prod")
public class ProdFoo implements Foo {

    @Override
    public void bar() { ... }
}

从现在开始,它们已准备好根据活动配置文件注入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多