getSession v / s getDefaultSession和

时间:2011-07-08 05:03:11

标签: java javax.mail

1。) getSession()getDefaultSession()之间有什么区别? 我已阅读 Doc ,但我不清楚gets the default session object的含义。

2。)在方法public static Session getDefaultInstance(Properties props, Authenticator authenticator)

第二个论点意味着什么,它做了什么以及它是如何做的?

3。)我经常遇到这个片段:

Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("USERNAME_HERE", "PASSWORD_HERE");
    }
});

我已经看到这里覆盖的merthod永远不会被调用。这种方法有什么作用?

1 个答案:

答案 0 :(得分:0)

来自JavaMail FAQ

  

几乎所有代码都应该使用Session.getInstance。 Session.getDefaultInstance方法使用传递的Properties在第一次调用时创建一个新的Session。后续调用将返回原始会话,忽略您传递的任何属性。如果要创建具有不同属性的不同会话,Session.getDefaultInstance将不会这样做。如果同一JVM中的某些其他代码(例如,在同一个应用程序服务器中)已经使用其属性创建了默认会话,则最终可能会使用其会话,并且将忽略您的属性。这通常可以解释为什么您的属性设置似乎被忽略。始终使用Session.getInstance来避免此问题。

第二个参数是一个子类,它知道如何获取用于登录邮件服务器的用户名和密码。它还保留了用户可能需要的一些附加上下文,例如将接收用户名和密码的主机名。来自javax.mail.Authenticator文档:

  

类Authenticator表示一个知道如何获取网络连接身份验证的对象。通常,它会通过提示用户提供信息来完成此操作。

getPasswordAuthentication方法是callback,带有硬编码的用户名和密码。在引擎盖下,调用javax.mail.Service.connect()时会调用此方法。例如,当您致电public static void Transport.send(Message)