[Spring] utiliser une constante

Le
Jogo
Bonjour,

Je voudrait donner à une propriété la valeur d'une constante, et je ne
sais pas comment faire. En gros, j'ai :

class Flu {
public static final int TITI ;
public void setProp(int titi);
}

Et je voudrait faire :

<bean name="flu" class="Flu">
<property name="prop" value="TITI"/>
</bean>

Est-ce possible ?

--
On ne rentre pas dans un zombi si on peut s'en dispenser.
-- T. Pratchett
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Michel
Le #229972
Bonjour,

Il y'a deux manière d'initialiser une variable final static:

1) lors de la déclaration:
public static final int TITI = 0;

2) dans un bloc static:
public static final int TITI;
static {
//Ici on peux mettre du cjava (genre ouverture d'un fichier de config)
TITI = 0;
}

Ce blog sera executé au plus une fois (lors du chargement de ta classe
dans la JVM)

Pour ton cas, initialiser la variable en fonction dd'un fichier de
conf, tu devrait utiliser la version 2.

Par contre ton fichier <bean ... me fait penser à une conf spring,
dans ce cas ça ne marchera pas.



On Aug 21, 11:05 am, Jogo
Bonjour,

Je voudrait donner à une propriété la valeur d'une constante, et je ne
sais pas comment faire. En gros, j'ai :

class Flu {
public static final int TITI ;
public void setProp(int titi);

}

Et je voudrait faire :

<bean name="flu" class="Flu">
<property name="prop" value="TITI"/>
</bean>

Est-ce possible ?

--
On ne rentre pas dans un zombi si on peut s'en dispenser.
-- T. Pratchett


Jogo
Le #229970
Il y'a deux manière d'initialiser une variable final static:

[snip]

Pour ton cas, initialiser la variable en fonction dd'un fichier de
conf, tu devrait utiliser la version 2.

Par contre ton fichier <bean ... me fait penser à une conf spring,
dans ce cas ça ne marchera pas.


Ralala, c'est pénible ce google groups qui vire les balises des sujets
(il y avait la balise [Spring] à l'origine). Mais c'est vrai que
j'aurais du repréciser dans le sujet. Il ne s'agissait donc pas
d'initialiser un membre static final, mais de donner à une propriété la
valeur d'un membre static en utilisant Spring. Ce problème est fréquent
en fait avec les classes qui n'utilisent pas les enum.

Voici un exemple peut-être plus parlant :

/* Classe dont je ne vois pas le code source.
* Je ne connais donc pas en réalité la valeur réelle des A.cas*.
*/
public class A {
public static final int casA = 1;
public static final int casB = 2;
public static final int casC = 3;

public A(int cas) {
...
}
}

/* Ma classe à moi qui utilise la classe A
*/
public class B {
private A ref = null;

public void setRef(int cas) {
ref = new A(cas);
}
}

</bean>

Voilà, mais ça bien sûr, ça ne marche pas. Il y a-t-il une façon de
faire pareil qui mache ?

--
The perfect man is the true partner. Not a bed partner nor a fun
partner, but a man who will shoulder burdens equally with [you] and
possess that quality of joy.
-- Erica Jong

ToOmS
Le #230559
On 22 août, 13:41, Jogo
Il y'a deux manière d'initialiser une variable final static:

[snip]

Pour ton cas, initialiser la variable en fonction dd'un fichier de
conf, tu devrait utiliser la version 2.

Par contre ton fichier <bean ... me fait penser à une conf spring,
dans ce cas ça ne marchera pas.


Ralala, c'est pénible ce google groups qui vire les balises des sujets
(il y avait la balise [Spring] à l'origine). Mais c'est vrai que
j'aurais du repréciser dans le sujet. Il ne s'agissait donc pas
d'initialiser un membre static final, mais de donner à une propriét é la
valeur d'un membre static en utilisant Spring. Ce problème est fréque nt
en fait avec les classes qui n'utilisent pas les enum.

Voici un exemple peut-être plus parlant :

/* Classe dont je ne vois pas le code source.
* Je ne connais donc pas en réalité la valeur réelle des A.cas*.
*/
public class A {
public static final int casA = 1;
public static final int casB = 2;
public static final int casC = 3;

public A(int cas) {
...
}

}

/* Ma classe à moi qui utilise la classe A
*/
public class B {
private A ref = null;

public void setRef(int cas) {
ref = new A(cas);
}

}

</bean>

Voilà, mais ça bien sûr, ça ne marche pas. Il y a-t-il une faço n de
faire pareil qui mache ?

--
The perfect man is the true partner. Not a bed partner nor a fun
partner, but a man who will shoulder burdens equally with [you] and
possess that quality of joy.
-- Erica Jong


Après tout, les constantes ne sont qu'un outil de conception...
Pourquoi ne pas initialiser une VARIABLE à NULL et provoquer une
exception dans le setter si la valeur précédente est différente de
NULL ?
Tant qu'on y est, on peut lever une exception dans le getter si la
valeur est NULL, à tout hasard.


ToOmS
Le #230558
On 22 août, 13:41, Jogo
Il y'a deux manière d'initialiser une variable final static:

[snip]

Pour ton cas, initialiser la variable en fonction dd'un fichier de
conf, tu devrait utiliser la version 2.

Par contre ton fichier <bean ... me fait penser à une conf spring,
dans ce cas ça ne marchera pas.


Ralala, c'est pénible ce google groups qui vire les balises des sujets
(il y avait la balise [Spring] à l'origine). Mais c'est vrai que
j'aurais du repréciser dans le sujet. Il ne s'agissait donc pas
d'initialiser un membre static final, mais de donner à une propriét é la
valeur d'un membre static en utilisant Spring. Ce problème est fréque nt
en fait avec les classes qui n'utilisent pas les enum.

Voici un exemple peut-être plus parlant :

/* Classe dont je ne vois pas le code source.
* Je ne connais donc pas en réalité la valeur réelle des A.cas*.
*/
public class A {
public static final int casA = 1;
public static final int casB = 2;
public static final int casC = 3;

public A(int cas) {
...
}

}

/* Ma classe à moi qui utilise la classe A
*/
public class B {
private A ref = null;

public void setRef(int cas) {
ref = new A(cas);
}

}

</bean>

Voilà, mais ça bien sûr, ça ne marche pas. Il y a-t-il une faço n de
faire pareil qui mache ?

--
The perfect man is the true partner. Not a bed partner nor a fun
partner, but a man who will shoulder burdens equally with [you] and
possess that quality of joy.
-- Erica Jong


Autre idée, sous Spring notamment : utiliser un singleton d'une classe
ne contenant que cette valeur (ou un ensemble de valeurs que l'on
souhaite constantes et que l'on fixe dans le fichier d'injection).
C'est plus facile à contrôler en configuration (ici) qu'en exécution
(exceptions dans les accesseurs).


Tom
Le #230523
Voilà comment utiliser les constantes avec Spring :

<bean name="MA_CONSTANTE" id="org.xxx.yyy.MA_CONSTANTE"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean"/>


On 22 août, 13:41, Jogo
Il y'a deux manière d'initialiser une variable final static:
[snip]
Pour ton cas, initialiser la variable en fonction dd'un fichier de
conf, tu devrait utiliser la version 2.
Par contre ton fichier <bean ... me fait penser à une conf spring,
dans ce cas ça ne marchera pas.
Ralala, c'est pénible ce google groups qui vire les balises des sujets

(il y avait la balise [Spring] à l'origine). Mais c'est vrai que
j'aurais du repréciser dans le sujet. Il ne s'agissait donc pas
d'initialiser un membre static final, mais de donner à une propriété la
valeur d'un membre static en utilisant Spring. Ce problème est fréquent
en fait avec les classes qui n'utilisent pas les enum.

Voici un exemple peut-être plus parlant :

/* Classe dont je ne vois pas le code source.
* Je ne connais donc pas en réalité la valeur réelle des A.cas*.
*/
public class A {
public static final int casA = 1;
public static final int casB = 2;
public static final int casC = 3;

public A(int cas) {
...
}

}

/* Ma classe à moi qui utilise la classe A
*/
public class B {
private A ref = null;

public void setRef(int cas) {
ref = new A(cas);
}

}

</bean>

Voilà, mais ça bien sûr, ça ne marche pas. Il y a-t-il une façon de
faire pareil qui mache ?

--
The perfect man is the true partner. Not a bed partner nor a fun
partner, but a man who will shoulder burdens equally with [you] and
possess that quality of joy.
-- Erica Jong


Autre idée, sous Spring notamment : utiliser un singleton d'une classe
ne contenant que cette valeur (ou un ensemble de valeurs que l'on
souhaite constantes et que l'on fixe dans le fichier d'injection).
C'est plus facile à contrôler en configuration (ici) qu'en exécution
(exceptions dans les accesseurs).





ToOmS
Le #230522
On 10 sep, 12:21, Tom
Voilà comment utiliser les constantes avec Spring :

<bean name="MA_CONSTANTE" id="org.xxx.yyy.MA_CONSTANTE"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryB ean"­/>

Merci, bien vu.

Pour une explication un peu plus diserte : http://www.unicon.net/node/601

Publicité
Poster une réponse
Anonyme