我無法將Bean類型注入屬性文件的構造函數參數中。 我可以通過直接將值傳遞給@Qualifier(「beanName」)來注入它,如下所示。使用Spring註解將Bean注入構造函數參數並使用Property佔位符
@Component("circle")
public class Circle implements Shape {
}
@RestController
class MyController {
private final Shape shape;
@Autowired
public MyClass(@Qualifier("circle")
Shape shape) {
this.shape = shape;
}
}
但是,下面的代碼示例不起作用。
這將返回Null。
到位@Qualifier使用@Resource(NAME = 「$ {}形」)這裏提到( Spring: Using @Qualifier with Property Placeholder) 但讓編譯器錯誤 「 '@資源' 並不適用於參數」 嘗試
@Resource( 「$ {}形」)給出了錯誤 「找不到方法 '價值'」
這並不工作過:
@RestController
class MyController {
@Value("${shape}")
private final String shapeBean; //Compiler error : "Variable 'shapeBean' might not have been initialised"
//Not declaring shapeBean as final will give a compiler error at @Qualifier: "Attribute value must be constant"
private final Shape shape;
@Autowired
public MyClass(@Qualifier(shapeBean)
Shape shape) {
this.shape = shape;
}
}
下面的代碼不起作用。在@Qualifier中給出編譯器錯誤:「屬性值必須是常量」。
@RestController
class MyController {
@Value("${shape}")
private final String shapeBean;
private final Shape shape;
@Autowired
public MyClass(@Qualifier(shapeBean)
Shape shape) {
this.shape = shape;
}
}
還嘗試了以下內容。在嘗試訪問形狀時都拋出NullPointerException。
@Resource(name="${shape}")
private Shape shape; // In addition, throws a warning saying, "Private field 'shape' is never assigned"
@Autowired
@Resource(name="${shape}")
private Shape shape;
如果構造函數參數是一個基元或一個字符串,我可以只使用@Value(「$ {shape}」)並將值注入到變量中。但因爲它是一個類,我不知道如何完成它。
有人可以告訴我,如果我配置不正確或我應該做什麼?
所以你想在運行時選擇不同的形狀?一般來說,你會使用像這樣的配置文件。你能對你的實際應用更具體嗎? – chrylis
從上面的例子中可以看出,我有一個Shape接口和具體類實現形狀。但現在在我的控制器中,我只想將圓形狀注入到Shape對象中。我之前使用的@Qualifier(「circle」)完美運作。但由於我不想保留硬編碼,我想從屬性文件中獲取它。有什麼辦法可以從屬性文件中獲取值,然後將該值插入到Shape對象中? – Arthas