2012-09-24 8 views
3

J'utilise l'annotation suivante:Passer des paramètres dynamiques à une annotation?

@ActivationConfigProperty(
    propertyName = "connectionParameters", 
    propertyValue = "host=127.0.0.1;port=5445,host=127.0.0.1;port=6600"), 
public class TestMDB implements MessageDrivenBean, MessageListener 

Je voudrais tirer chacun de ces adresses IP et les ports et les stocker dans un fichier jmsendpoints.properties ... puis les charger dynamiquement. Quelque chose comme ceci:

@ActivationConfigProperty(
    propertyName = "connectionParameters", 
    propertyValue = jmsEndpointsProperties.getConnectionParameters()), 
public class TestMDB implements MessageDrivenBean, MessageListener 

Y at-il un moyen de faire cela?

+1

Vous pouvez avoir 'propertyValue =" jmsendpoints.properties ConnectionParameter "' que vous analysez dynamiquement. –

Répondre

9

n ° Le processeur d'annotation (le cadre basé sur des annotations que vous utilisez) doit implémenter une approche de gestion des espaces réservés.


À titre d'exemple, une technique similaire est mis en œuvre dans Spring

@Value("#{systemProperties.dbName}") 

Ici Spring met en œuvre une approche de analyse syntaxique cette syntaxe particulière, qui dans ce cas se traduit par quelque chose de similaire à System.getProperty("dbName");

1

Les annotations ne sont pas conçues pour être modifiables lors de l'exécution, mais vous pouvez utiliser une bibliothèque d'ingénierie bytecode telle que ASM afin de modifier les valeurs d'annotation dynamiquement. À la place, je recommande de créer une interface dans laquelle vous pouvez modifier ces valeurs. Vous voudrez peut-être créer une interface plus axée sur les valeurs-clés, mais c'est le concept général de celle-ci.

Questions connexes