我使用 @PropertyInject 注释从 application.properties 文件获取属性以在我的 bean 中使用。
这通常工作正常,但现在我需要能够根据 header 值更改注入(inject)的属性。
在我看来,它看起来像这样:
@PropertyInject(PROPERTY_NAME)
private String property;
public void pickProperty(String msgVersion) {
if (msgVersion.equals("A")) {
PROPERTY_NAME = "property.firstType.name";
} else {
PROPERTY_NAME = "property.secondType.name";
}
}
我考虑过只注入(inject)两个属性并在主方法中决定使用哪个属性,但这似乎是一种迂回的做法,如果添加更多版本,就会变得有点臃肿。
有没有简单的方法可以做到这一点?
最佳答案
now I need to be able to change the injected property based on a header value
属性和 Bean 是在应用程序启动时创建的,并且通常在应用程序运行时不会更改。它们都有适用范围。
另一方面, header 值可能会因应用程序处理的每条消息而发生变化。
正如您自己所建议的:您可以将这两个属性注入(inject)到 Bean 中,并提供一个方法,每个消息调用一次以获得正确的值
@PropertyInject(PROPERTY_A)
private String propertyA;
@PropertyInject(PROPERTY_B)
private String propertyB;
// called for every message processing
public String pickProperty(@Header("msgVersion") String msgVersion) {
if (msgVersion.equals("A")) {
return propertyA;
} else {
return propertyB;
}
}
这根本不是一种解决方法,而只是一种根据输入返回不同结果的方法。
关于java - Apache Camel Bean 中的动态 PropertyInjection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60597584/