Diego's weblog - Developer's notes

Todo | General | Design | Java
Main | Next day (oct 21, 2005) »

20051020 jueves octubre 20, 2005

Injeccion por constructor o por setter?

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]