我使用 SpringBoot 2.2.2.RELEASE (相當舊的),我有以下要求:
我有一個@Service 類,我想通過添加一個介面來擴展它的建構式。當應用程式加載時,我希望基于我將在屬性檔案中定義的某些屬性來@Autowired 正確的介面實體。所以這基本上是一個工廠,它通過屬性檔案中定義的一些屬性來實體化類。
這是我想象它如何作業的片段:
@Service
class MyService {
@Autowired
public MyService(Shape shape) { ...}
}
interface Shape { ...}
class Circle implements Shape { ... }
class Rectangle implements Shape { ... }
魔法應該存在于某個工廠類中,該類從屬性檔案中讀取屬性并相應地實體化Shape.
此應用程式的每個實體都在具有自己獨特屬性檔案的專用機器 (EC2) 上運行。
Spring Boot中是否有類似的東西?
任何建議,將不勝感激!
uj5u.com熱心網友回復:
實作它的一種方法是@ConditionalOnProperty在屬性具有特定值時使用注釋來實體化 bean。您可以使用matchIfMissing = true來確定默認行為。
@Bean
@ConditionalOnProperty(name = "shape", havingValue = "circle", matchIfMissing = true)
public Shape circleShape() {
return new Circle();
}
@Bean
@ConditionalOnProperty(name = "shape", havingValue = "rectangle")
public Shape rectangleShape() {
return new Rectangle();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/450501.html
