La DI basada en Setter se realiza mediante el contenedor que llama a setters en beans después de llamar a un
constructor sin argumentos o a un método de fábrica static
sin argumentos para crear una instancia del
bean.
El siguiente ejemplo muestra una clase cuya dependencia solo se puede inyectar a través de un definidor. Esta clase es una clase Java normal. Es un POJO (objeto Java simple) que no depende de interfaces de contenedor, clases base o anotaciones específicas.
public class SimpleMovieLister {
// SimpleMovieLister depends on MovieFinder
private MovieFinder movieFinder;
// setter to allow the Spring container to implement MovieFinder
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
// business logic that actually uses the embedded MovieFinder is omitted...
}
class SimpleMovieLister {
// lazy-initialized property that allows the Spring container to implement MovieFinder
lateinit var movieFinder: MovieFinder
// business logic that actually uses the embedded MovieFinder is omitted...
}
ApplicationContext
admite DI basada en constructor y definidor para los beans que administra. También
admite DI basada en setter después de que algunas dependencias ya se hayan inyectado utilizando el enfoque del
constructor. Las dependencias se configuran en forma de BeanDefinition
, que se utiliza junto con
instancias de PropertyEditor
para convertir propiedades de un formato a otro. Sin embargo, la mayoría
de los usuarios de Spring trabajan con estas clases no directamente (es decir, mediante programación), sino con
definiciones XML bean
componentes anotados (es decir, clases marcadas con @Component
,
anotaciones). @Controller
y así sucesivamente) o métodos marcados con la anotación @Bean
en clases basadas en Java marcadas con la anotación @Configuration
. Estas fuentes luego se convierten
internamente en instancias BeanDefinition
y se usan para cargar toda la instancia del contenedor Spring
IoC.