2009-12-18 13 views
2

我想在彈簧的應用程序使用HTML電子郵件中的Apache公地電子郵件,所以我使用的XML配置如下:春天 - 配置Apache的通用電子郵件

<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類的無效屬性'smtpPort'[org.apache.commons.mail.HtmlEmail]:Bean屬性'smtpPort'不可寫或具有無效的setter方法。 setter的參數類型是否與getter的返回類型相匹配?

請告訴我我做錯了什麼?謝謝。

回答

7

發生這種情況,因爲smtpPort屬性是模糊的 - 該getSmtpPort方法返回一個String,但setSmtpPort方法採用int。在這一點上,Spring會變得很冷,並拋出異常說bean屬性是無效的。

我認爲HtmlEmail和Spring都是錯誤的 - HtmlEmail對於糟糕的API設計,Spring是不必要的迂腐。

我建議的解決方案是一個:

  1. 創建您自己的HtmlEmail子類,定義一個新的setter方法,用新的名稱,委託給setSmtpPort。這是快速和容易的,但它本身設計很差。

  2. Write an implementation Spring的FactoryBean接口,該接口獲得實例化和配置HtmlEmail實例的工作。這比(1)更多的工作,但是是一個更清潔的設計。

  3. Ditch Commons完全發送電子郵件,並使用Spring's own Email abstraction layer。這將是我推薦的選擇。

相關問題