2

我想在 spring 应用程序的 apache commons-email 中使用 HtmlEmail,所以我使用如下配置 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”不可写或设置方法无效。setter 的参数类型是否与 getter 的返回类型匹配?

请告诉我我做错了什么?谢谢你。

4

1 回答 1

7

发生这种情况是因为smtpPort属性不明确 - 该getSmtpPort方法返回 a String,但该setSmtpPort方法采用int. Spring 在这一点上变得冷淡,并抛出异常说 bean 属性无效。

我认为HtmlEmail这里和 Spring 都有错——HtmlEmail因为糟糕的 API 设计,Spring 是不必要的迂腐。

我推荐的解决方案是以下之一:

  1. 创建您自己的子类HtmlEmail,定义一个新的 setter 方法,使用新名称,委托给setSmtpPort. 这既快速又简单,但它本身的设计相当糟糕。

  2. 编写SpringFactoryBean接口的实现,它负责实例化和配置HtmlEmail实例。这比 (1) 更有效,但设计更简洁。

  3. 彻底抛弃 Commons Email,使用Spring 自带的 Email 抽象层。这将是我推荐的选择。

于 2009-12-18T07:02:26.553 回答