No estoy seguro de que haya una "mejor" manera de inicializar un frijol. Creo que hay ventajas y desventajas para cada uno, y dependiendo de la situación, uno u otro podrían ser apropiados. Esta ciertamente no es una lista exhaustiva, pero aquí hay algunas cosas que considerar.
El uso de un constructor le permite tener un bean inmutable. Los objetos inmutables son buenos si puedes colocarlos en tu diseño. No requieren copia, acceso serializado u otro manejo especial entre hilos. Si tiene setters, su objeto no es inmutable. Usar un constructor también asegura que el objeto esté inicializado correctamente. Después de que el constructor finaliza, el objeto es válido. Si su objeto requiere el uso de setters para inicializarlo, es posible que tenga un objeto no válido.
Por otro lado, el uso de constructores a menudo conduce a un problema telescópico. Muchas veces necesitará muchos constructores diferentes, la mayoría de los cuales serán un superconjunto de otro constructor. Muchas veces estos son por conveniencia. Por ejemplo:
public class Person {
public Person(String name) { ... }
public Person(String name, String phone) { ... }
public Person(String name, String phone, String email) { ... }
}
Una alternativa a esto que me gusta mucho es la llamada Builder "mejorado", presentado por Josh Bloch en JavaOne. Puedes ver esto en su libro "Effective Java, Second Edition". Si observa la forma en que se usa el patrón, también resolverá su problema del método "afterProperties". El patrón del generador garantizará que el objeto esté correctamente inicializado.
Aquí es una entrada de blog adicional de discutir el patrón: http://www.screaming-penguin.com/node/7598
No estoy seguro de que esto se ajusta a su requerimiento de primavera, pero en general, yo soy un gran fan de constructor.
+1 - Muy buena respuesta –
me gusta su respuesta, pero sus enlaces están muertos:/ –
Gracias Maxime, actualicé la publicación con el único enlace que aún queda. :-) – lycono