2009-04-03 7 views
5

Estoy escribiendo una biblioteca de Java que será utilizada por una aplicación existente. Estoy usando la inyección de dependencia para que las pruebas sean más fáciles y estoy familiarizado con Spring, así que estaba planeando usarlo para administrar la inyección de dependencia durante la prueba. Sin embargo, las aplicaciones que eventualmente usarán la biblioteca no están basadas en Spring, ni usan ningún contenedor IoC/DI de ningún tipo actualmente. Mi pregunta es, ¿cuál es el mejor enfoque para inyectar dependencias si Spring o Guice no se utilizan? ¿Debo considerar algo así como un método de fábrica para crear instancias y cablear los objetos? Las dependencias están todas dentro de la biblioteca, por lo que no parece apropiado que la aplicación crea una instancia de cada dependencia para crear el objeto principal.Uso de la inyección de dependencia en una biblioteca

Respuesta

4

¿Cuál es el mejor enfoque para inyectar dependencias si no se usan Spring o Guice?

Si su biblioteca fue escrita en un idioma DI-friendly. Debería ser bastante fácil de usar como una API java sencilla. Piensa en tu experiencia pasada con la primavera. Hay varias bibliotecas que encajan perfectamente con el modelo de primavera, pero fueron escritas antes de la primavera. No veo nada malo con un new seguido de un par de setXX seguido de una llamada al método de trabajo real. Solo tenga mucho cuidado, ya que, entre otras cosas, su cliente puede olvidarse de llamar a los métodos init que la primavera llama confiablemente.

¿Debería considerar algo así como un método de fábrica para crear instancias y cablear los objetos? Las dependencias están todas dentro de la biblioteca, por lo que no parece apropiado que la aplicación crea una instancia de cada dependencia para crear el objeto principal.

Deje que la aplicación del cliente lo decida. Usted está proporcionando una biblioteca. Permita que el cliente API conecte sus propios objetos. Proporcione un ejemplo. Más tarde, ese mismo ejemplo se puede usar para hacer el método de fábrica en el dominio del cliente. Tal vez la aplicación cliente tenga su propia forma de configurarse, y sería deseable que la API que proporciona su biblioteca sea lo suficientemente flexible como para aprovecharla.

O tal vez puede incluir guice. La licencia es Apache. Como una pieza entera de Java en sí misma.

Cuestiones relacionadas