2011-07-08 24 views
0

1.)getSession()getDefaultSession()有什麼區別? 我已閱讀Doc但我不清楚gets the default session object是什麼意思。getSession v/s getDefaultSession和

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永遠不會被調用。這種方法做什麼?

回答

0

JavaMail FAQ

幾乎所有的代碼應該使用Session.getInstance。 Session.getDefaultInstance方法在第一次調用時使用傳遞的屬性創建一個新的Session。隨後的調用將返回原來的Session,並且忽略您在中傳遞的任何屬性。如果你想用不同的屬性創建不同的會話,Session.getDefaultInstance不會這樣做。如果同一JVM中的其他代碼(例如,在同一個應用程序服務器中)已經使用它們的屬性創建了默認的Session,那麼最終可能會使用它們的Session,並且您的屬性將被忽略。這常常解釋爲什麼你的財產設置似乎被忽略。總是使用Session.getInstance來避免這個問題。

第二個參數是知道如何獲取應該用於登錄到郵件服務器的用戶名和密碼的子類。它還保留用戶可能需要的一些附加上下文,例如將接收用戶名和密碼的主機名。從javax.mail.Authenticator文檔:

類Authenticator表示知道如何獲取網絡連接的身份驗證的對象。通常,它會通過提示用戶提供信息來做到這一點。

getPasswordAuthentication方法是callback與硬編碼的用戶名和密碼。在引擎蓋下,調用javax.mail.Service.connect()時會調用此方法。其中一個例子是您撥打public static void Transport.send(Message)

相關問題