私は一見シンプルな春の問題を抱えている春の初心者です。私はこれに何時間も運をかけずに取り組みました。ここに例外があり、その後にコードが続きます(事前に感謝します):
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?
私の豆の定義:
<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>
コードスニペット:
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;
}
// =====================================================
}
ここには、ドライバー(含むメインメソッド)クラスを含めませんでした。そのドライバークラスは上記のクラスに依存しますが、ドライバークラス自体には問題はありません(信じられません)。
上記のエラーは「ホスト」プロパティに問題があることを示していますが、ご想像のとおり、「ポート」プロパティにも同じ問題があります(「ホスト」プロパティが最初に評価されるのは偶然です)。
誰が私が間違っているのか教えてもらえますか?私がSpringの人ではないので、あなたが望むなら、自由に説明してください。ありがとうございました。
1)ホストでは、パブリックgetHost()
およびsetHost(String s)
を定義する必要があります
メソッド。ポートについても同様に、getPort()
およびsetPort(int v)
メソッドが必要です。
これは、SpringがBeanを初期化するために必要なものです。
特にセッターが必要だと思います(この場合)。
または...
2)XMLファイルのプロパティの名前を
carbonHost
およびcarbonPort
。これもそれを行う必要があります。
問題は、Bean構成で_<property name="port" value="2023" />
_を使用しているが、ExampleClass
の対応するメソッドがsetCarbonPort(int port)
と呼ばれることです。
解決策:xmlを_<property name="carbonPort" value="2023" />
_に更新するか、メソッドをsetPort(int port)
に更新します。
ゲッターとセッターはパブリックである必要があります。他のアクセスレベルではエラーが発生します。