我使用以下注释:
@ActivationConfigProperty(
propertyName = "connectionParameters",
propertyValue = "host=127.0.0.1;port=5445,host=127.0.0.1;port=6600"),
public class TestMDB implements MessageDrivenBean, MessageListener
我想拉出每个IP地址和端口并将它们存储在文件jmsendpoints.properties
中......然后动态加载它们。像这样:
@ActivationConfigProperty(
propertyName = "connectionParameters",
propertyValue = jmsEndpointsProperties.getConnectionParameters()),
public class TestMDB implements MessageDrivenBean, MessageListener
有办法吗?
答案 0 :(得分:10)
否。注释处理器(您正在使用的基于注释的框架)需要实现处理占位符的方法。
作为示例,在Spring
@Value("#{systemProperties.dbName}")
此处Spring
实现了解析特定语法的方法,在这种情况下转换为类似于System.getProperty("dbName");
答案 1 :(得分:1)
注释不能在运行时修改,但您可以使用字节码工程库(如ASM)来动态编辑注释值。
相反,我建议您创建一个可以修改这些值的界面。
public interface Configurable {
public String getConnectionParameters();
}
public class TestMDB implements MessageDrivenBean, MessageListener, Configurable {
public String getConnectionParameters() {
return jmsEndpointsProperties.getConnectionParameters();
}
//...
}
您可能希望创建一个更加面向键值的界面,但这是它的一般概念。