2

Spring アプリの apache commons-email で HtmlEmail を使用したいので、config xml を次のように使用します。

<bean id="commonsEmail" class="org.apache.commons.mail.HtmlEmail">
    <property name="hostName" value="smtp.example.com" />
    <property name="TLS" value="true"/>
    <property name="smtpPort" value="587"/>
</bean>

しかし、smtpPort プロパティのために初期化できません。

Bean クラス [org.apache.commons.mail.HtmlEmail] の無効なプロパティ 'smtpPort': Bean プロパティ 'smtpPort' は書き込み可能でないか、無効なセッター メソッドを持っています。セッターのパラメーターの型は、ゲッターの戻り値の型と一致していますか?

私が間違ったことを教えてください。ありがとうございました。

4

1 に答える 1

7

これは、smtpPortプロパティがあいまいであるために発生しています。メソッドは をgetSmtpPort返しますStringが、setSmtpPortメソッドは を受け取りますint。この時点で Spring は冷静になり、Bean プロパティが無効であるという例外をスローします。

HtmlEmailここでは両方ともSpringに問題があると思いHtmlEmailます.API設計が悪いため、Springは不必要に衒学的です。

私が推奨する解決策は、次のいずれかです。

  1. の独自のサブクラスを作成HtmlEmailし、新しいセッター メソッドを定義して、新しい名前で に委譲しsetSmtpPortます。これは手早く簡単にできますが、設計自体がかなり貧弱です。

  2. FactoryBeanインスタンスのインスタンス化と構成のジョブを取得するSpring のインターフェースの実装を作成HtmlEmailします。これは (1) よりも手間がかかりますが、よりクリーンな設計です。

  3. Commons Email を完全に捨てて、Spring 独自の Email 抽象化レイヤーを使用します。これは私の推奨オプションです。

于 2009-12-18T07:02:26.553 に答える