当前位置: 首页 > 知识库问答 >
问题:

根据Spring Boot上的属性实例化服务

贺山
2023-03-14

一个好的实践是将服务定义为接口并在类上实现它。

假设我有两个实现相同接口的类,我想根据属性(而不是概要文件)来区分它们。我的意思是,如果我有Autowire private MyServiceInterface myService如果我有myproperty=potato,我想接收PotatoServiceImpl的实例;如果我有myproperty=tomato,我想接收TomatoServiceImpl的实例。

我没有使用个人资料。

P、 当我说属性时,我指的是应用程序中的属性。属性

共有1个答案

刘凡
2023-03-14

看:

public interface MyInterface {
}

@Component
@ConditionalOnProperty(prefix = "myproperty" havingValue = "potato", matchIfMissing = false)
public class MyPotatoImpl implements MyInterface {
}

@Component
@ConditionalOnProperty(prefix = "myproperty" havingValue = "tomato", matchIfMissing = false)
public class MyTomatoImpl implements Myinterface {
}

@Component
public class Consumer {
    @Autowire
    private MyInterface tomatoOrPotato; //depending on property myproperty value
}

对我来说,这是一个非常优雅的解决方案,可以实现Spring风格的策略创建设计模式。在这里查看有关@HarditionalOnProperty注释的文档。

 类似资料:
  • 我正在寻找一种解决方案,使用Jackson基于同一POJO中的其他属性值序列化POJO对象属性 如果某个属性值符合某些条件,则应根据要求更改其他属性值 例如,下面是我的JSON对象: 在上述情况下,如果的值符合某些条件,那么我应该能够更改的值 为什么需要这样做: 是一个配置对象 和-是配置设置 在上面的例子中,中有一个是,我需要屏蔽/更改相应的 还要补充一点,在这个例子中,属性是和,但是如果我们找

  • 有一个具有Rest控制器的Springboot应用程序,并且所有RestAPI都已定义如下 这个应用程序已经部署在docker上,并在docker上运行一个实例,其中docker主机端口8080已经映射到容器端口8080,我能够成功运行这个应用程序。 现在的问题是当我创建多个Web应用程序实例时,可以在不同的端口(如 http://localhost:8181/myapplication 等)上访

  • 如果我要做新球员(“约翰”)。doSomething()java抱怨这一点。gameService为null。需要实例化Player类。 是否可以使gameService自动连接到服务正确?

  • 由于Python是动态语言,根据类创建的实例可以任意绑定属性。 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90 但是,如果Student类本身需要绑定一个属性呢?可

  • 在这个情景下,委托就可以帮助我们了。我们直到我们的单例不会是null,但是我们不能使用构造函数去初始化属性。所以我们可以使用notNull委托: class App : Application() { companion object { var instance: App by Delegates.notNull() } override fun onCr

  • 问题内容: 我想根据属性名称打印属性值,例如 我想做这样的事情 上面的代码给出了一个,我相信这是因为BeatifulSoup使用了name,所以它不能用作关键字参数。 问题答案: 这很简单,请使用以下代码- 如果不清楚,请发表评论。