2010-02-16 19 views
8

Estoy revisando el código que no escribí que usa JavaMail, y tengo problemas para entender por qué la API JavaMail está diseñada tal como está. Tengo la sensación de que, si lo entendiera, podría estar haciendo un mejor trabajo.¿Por qué JavaMail Transport.send() es un método estático?

Nos llaman:

transport = session.getTransport("smtp"); 
transport.connect(hostName, port, user, password); 

Entonces ¿por qué me está advirtiendo que este Eclipse:

transport.send(message, message.getAllRecipients()); 

es una llamada a un método estático?

¿Por qué obtengo un objeto Transporte y proporciono configuraciones que son específicas si no puedo usar ese objeto para enviar el mensaje? ¿Cómo sabe la clase Transport qué servidor y qué otras configuraciones usar para enviar el mensaje? Está funcionando bien, lo cual es difícil de creer. ¿Qué pasaría si hubiera instanciado objetos de transporte para dos servidores diferentes? ¿Cómo sabría cuál usar?

En el curso de escribir esta pregunta, he descubierto que realmente debería estar llamando a:

transport.sendMessage(message, message.getAllRecipients()); 

Entonces, ¿cuál es el propósito del método estático Transport.send()? ¿Es este un diseño pobre, o hay una razón por la cual es así?

Respuesta

8

Transport.send() es básicamente un método de conveniencia. Sí, si está administrando su propia instancia de Transport, llame al sendMessage().

No estoy seguro de que lo considere un mal diseño, ya que con frecuencia no le importa administrar los detalles de envío y monitoreo de transporte. Abre el método send() para ver lo que hace por ti. Otras formas de nombrar o colocar este método podrían ser marginalmente mejores.

5

el Javadoc dice:

Enviar es un método estático que crea y gestiona su propia conexión. Cualquier conexión asociada con cualquier instancia de transporte utilizada para invocar este método se ignora y no se utiliza. Este método solo debe invocarse con el formato Transport.send (msg) ;, y nunca debe invocarse con una variable de instancia.

Y sí, probablemente, el diseño no es bueno

Cuestiones relacionadas