【问题标题】:Spring - config apache commons emailSpring - 配置 Apache 公共电子邮件
【发布时间】:2010-12-27 22:59:57
【问题描述】:

我想在 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 方法。 setter的参数类型和getter的返回类型是否匹配?

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

【问题讨论】:

    标签: java spring email apache-commons


    【解决方案1】:

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

    我认为HtmlEmail 和 Spring 都存在问题 - HtmlEmail 用于糟糕的 API 设计,Spring 用于不必要的迂腐。

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

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

    2. Spring 的FactoryBean 接口的Write an implementation,它负责实例化和配置HtmlEmail 实例。这比 (1) 更有效,但设计更简洁。

    3. 完全抛弃 Commons 电子邮件,并使用 Spring's own Email abstraction layer。这是我推荐的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-31
      • 2021-10-20
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 2014-07-07
      • 1970-01-01
      相关资源
      最近更新 更多