jueves octubre 20, 2005 Se me plantea la siguiente duda con respecto a como injectar colaboradores/recursos a objetos. Utilizar injección por constructor o por setter (considerando que estos dos son los más utilizados).
Veo las ventajas y desventajas de cada uno de estos approach, sin embargo, creo que la injección por constructor tiene una gran ventaja con respecto a la injección por setter que es que me permite crear los objetos totalmente configurados con lo cual mantienen un estado consistente del objeto mientras que la injección por setter podría dejar colaboraciones en null, siendo mas propenso a errores. Ademas la injección por constructor genera menos código (setXXX).
Pero, a pesar de esto, creo que la injección de setter es mejor en la mayoria de los casos, dado que disfruta de un conjunto de ventajas como ser:
(Tomado del libro Expert One-on-One? J2EE Development without EJB Rod Johnson with Juergen Hoeller)
- JavaBean properties are well supported in IDEs.
- JavaBean properties are self-documenting.
- JavaBean properties are inherited by subclasses without the need for any code.
- It?s possible to use the standard JavaBeans property-editor machinery for type conversions if necessary.
- Many existing JavaBeans can be used within a JavaBean-oriented IoC container without modification.
- If there is a corresponding getter for each setter (making the property readable, as well as writable), it is possible to ask the component for its current configuration state.
- Setter Injection works well for objects that have default values, meaning that not all properties
need to be supplied at runtime.
Además (de acuerdo a la implementación del IoC container) puede lograr el mismo resultado en el checkeo de las dependencias para obtener objetos creados con un estado consistente.
Que creen ustedes?
( oct 20 2005, 12:09:16 PM ART )
Permalink
Comentarios [1]
Supongo que estas hablando de Spring... Por mi experiencia en su uso, cuando haces el xml te da igual referenciar al valor en el constructor que en un setter...
Y con tantas ventajas como enumeras, dando igual, pues lo haces con setters :)
Por constructor solo lo uso cuando la clase no es mia y no tengo opción de cambiarla...
Enviado por anonimo en octubre 20, 2005 a las 01:12 PM ART #