重写 java 个内部方法

Overriding java internals methods

我有一个 class 说 TestEmail 有一个 sendEmail() 方法

现在 sendEmail 方法调用一个 apache 公共方法,该方法在内部调用 javax.mail 包中的方法。我想覆盖其中一种内部方法。我在下面提供代码流:

TestEmail.sendEmail()->
commons.Email.send()->commons.Email.sendMIMEMessage()->
javax.mail.Transport.send()->javax.mail.Transport(){saveChanges()}-> 
javax.mail.MimeMessage.updateHeaders()->updateMessageID()

我想覆盖 updateMessageID 方法。在我的 TestEmail class 中。可能吗?怎么样?

我认为可以通过扩展三个 类:commons.Email、javax.mail.Transport 和 javax.mail.MimeMessage;并重写它们各自的方法以使用 updateMessageID() 的新行为。

看起来您将覆盖 Email.createMimeMessage(Session) 在您正在使用的电子邮件子类中。然后让 createMimeMessage return 成为 javax.mail.MimeMessage 的子类,覆盖 updateMessageID 以执行您想要的操作。如果您只需要删除用户标识,那么还有其他方法可以做到这一点。请参阅:Override Message-ID by configuration 了解详细信息。