Printemps Bean propriété 'xxx' est pas accessible en écriture ou n'est pas valide méthode de définition
Je suis un Printemps débutant avec une apparence simple, Printemps problème. J'ai travaillé sur cela pendant des heures sans succès. Ici est l'exception, suivi par le code (merci d'avance):
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'graphiteWriterSession' defined in file [/home/user/resources/jmxtrans.graphite.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'host' of bean class [com.example.ExampleClass]: Bean property 'host' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
Mon haricot définitions:
<bean id="graphiteWriterSession" class="com.example.ExampleClass">
<property name="host" value="host.example.com" />
<property name="port" value="2023" />
<property name="namespacePrefix" value="apps.foo.bar" />
<property name="debug" value="true" />
</bean>
<bean id="jmxtransSession" class="com.example.MainMethodClass" factory-method="getInstance">
<property name="graphiteWriterSession" ref="graphiteWriterSession" />
</bean>
L'extrait de code:
package com.example.ExampleClass;
import com.googlecode.jmxtrans.model.output.GraphiteWriter;
public class ExampleClass {
private static final long serialVersionUID = 1L;
private String host;
private int port;
private GraphiteWriter gw;
public ExampleClass() {
}
public GraphiteWriter getWriter() {
gw = new GraphiteWriter();
gw.addSetting(GraphiteWriter.PORT, port);
gw.addSetting(GraphiteWriter.HOST, host);
return gw;
}
//=====================================================
//set/get methods for Carbon host.
//Plugged into Spring application-context file.
//=====================================================
public void setCarbonHost( String host ) {
this.host = host;
}
public String getCarbonHost() {
return host;
}
//=====================================================
//=====================================================
//set/get methods for Carbon port.
//Plugged into Spring application-context file.
//=====================================================
public void setCarbonPort( int port ) {
this.port = port;
}
public int getCarbonPort() {
return port;
}
//=====================================================
}
Je ne comprend pas le pilote (méthode main contenant) de classe ici. Bien que la classe du pilote dépend de la classe ci-dessus, le pilote de la classe elle-même n'a pas un problème (je ne crois pas).
L'erreur ci-dessus montre "l'hôte" de la propriété comme ayant le problème, mais, comme vous vous en doutez, le "port" de la propriété a le même problème (il se trouve que "l'hôte" de la propriété est évaluée en premier).
Quelqu'un peut me dire où je vais mal? N'hésitez pas à expliquer si vous le souhaitez, tant que je ne suis pas un Printemps de la personne, en soi. Merci.
Vous devez vous connecter pour publier un commentaire.
1) Pour l'hôte, vous devez définir le public
getHost()
etsetHost(String s)
méthodes, de même pour le port que vous devez
getPort()
etsetPort(int v)
méthodes.C'est ce qui Ressort doit initialiser votre bean.
Je pense qu'il faut le setter en particulier (dans ce cas).
Ou ...
2) Vous pouvez renommer les propriétés de votre fichier XML pour
carbonHost
etcarbonPort
. Cela devrait le faire aussi.Le problème est que vous utilisez
<property name="port" value="2023" />
dans votre configuration spring, mais la méthode correspondante dans leExampleClass
est appelésetCarbonPort(int port)
.Solution: mettre à jour le xml pour
<property name="carbonPort" value="2023" />
ou la méthode desetPort(int port)
.Les getters et setters doit être public, de tout autre niveau d'accès sera la cause de l'erreur.