Mon bean Spring a un constructeur avec un argument obligatoire unique, et j'ai réussi à l'initialiser avec la configuration xml:
<bean name="interfaceParameters#ota" class="com.company.core.DefaultInterfaceParameters">
<constructor-arg>
<value>OTA</value>
</constructor-arg>
</bean>
Ensuite, j'utilise ce bean comme ça et ça marche bien.
@Resource(name = "interfaceParameters#ota")
private InterfaceParameters interfaceParameters;
Mais je voudrais spécifier la valeur d'arg du constructeur avec les annocations, quelque chose comme
@Resource(name = "interfaceParameters#ota")
@contructorArg("ota") // I know it doesn't exists!
private InterfaceParameters interfaceParameters;
Est-ce possible ?
Merci d'avance
Tout d'abord, vous devez spécifier le constructeur arg dans votre définition de bean, et non dans vos points d'injection. Ensuite, vous pouvez utiliser le @Value
annotation (printemps 3.0)
@Component
public class DefaultInterfaceParameters {
@Inject
public DefaultInterfaceParameters(@Value("${some.property}") String value) {
// assign to a field.
}
}
Pour autant que je vois le problème, cela pourrait ne pas vous convenir, car vous semblez définir plusieurs beans de la même classe, nommés différemment. Pour que vous ne puissiez pas utiliser d'annotations, vous devez les définir en XML.
Cependant, je ne pense pas que ce soit une si bonne idée d'avoir ces différents grains. Vous feriez mieux d'utiliser uniquement les valeurs de chaîne. Mais je ne peux pas donner plus d'informations, car je ne connais pas vos classes exactes.
Comme l'a dit Bozho, au lieu de l'argument constructeur, vous pouvez définir la propriété ... @ PostConstruct ne sera appelé qu'après que toutes les propriétés auront été définies ... donc, vous aurez toujours votre chaîne disponible ...