Spring - config apache commons email

rob*_*mag 2 java email spring apache-commons

我想在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>
Run Code Online (Sandbox Code Playgroud)

但由于smtpPort属性,我无法初始化它:

bean类的属性'smtpPort'无效[org.apache.commons.mail.HtmlEmail]:Bean属性'smtpPort'不可写或具有无效的setter方法.setter的参数类型是否与getter的返回类型匹配?

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

ska*_*man 7

发生这种情况是因为该smtpPort属性不明确 - 该getSmtpPort方法返回一个String,但该setSmtpPort方法需要一个int.Spring此时会变冷,并抛出异常,说bean属性无效.

我认为这两个HtmlEmail和Spring在这里都有问题 - HtmlEmail对于糟糕的API设计,Spring是不必要的迂腐.

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

  1. 创建自己的子类HtmlEmail,定义一个新的setter方法,使用一个新的名称,该名称委托给setSmtpPort.这很快捷,但设计本身就很差.

  2. 编写 Spring FactoryBean接口的实现,它实现了实例化和配置HtmlEmail实例的工作.这比(1)更多的工作,但是更清洁的设计.

  3. Ditch Commons完全发送电子邮件,并使用Spring自己的电子邮件抽象层.这是我推荐的选择.