将动态参数传递给注释?

时间:2012-09-24 15:42:27

标签: java annotations

我使用以下注释:

@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

有办法吗?

2 个答案:

答案 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();
    }

    //...
}

您可能希望创建一个更加面向键值的界面,但这是它的一般概念。