¡Aprenda un poco de SpringFactoryBean todos los días!
Acerca de FactoryBean:
Factory-Bean, Factory-Bean, en primer lugar, es una interfaz Spring importante, con muchas clases de implementación, como: ProxyFactoryBean, JndiObjectFactoryBean, etc. : Por ejemplo: ProxyFactoryBean, JndiObjectFactoryBean, etc.
La clase UserFactory implementa la interfaz FactoryBean.
La clase UserFactory implementa la interfaz FactoryBean y es responsable de crear un nuevo objeto de usuario en getObject():
Define un bean que devuelve UserFactory.
Lo que es más interesante aquí es que si UserFactory es un bean normal, entonces el bean llamado usuario será una instancia de UserFactory.
Sin embargo, debido a que UserFactory no es un Bean común y corriente (implementa la interfaz FactoryBean), no se usará como un Bean común y corriente. En su lugar, se llama al método getObject() para crear una nueva instancia de objeto. .
La siguiente @Configuration crea dos Beans:
Clase de prueba:
Spring proporciona la clase abstracta AbstractFactoryBean, que es la implementación de FactoryBean.
La clase AbstractFactoryBean tiene un parámetro: singleton, que por defecto es verdadero, lo que significa que los objetos creados a través de getObject() por defecto son singletons. Si se establece en falso, se llamará al método createInstance() para crear la instancia (este es un método abstracto y debe ser implementado por subclases).
El siguiente es el código fuente del método getObject() de la clase AbstractFactoryBean (basado en la versión: spring-beans:5.3.13.jar), que muestra la lógica anterior:
Dos pasos para crear un AbstractFactoryBean Una nueva subclase:
Configure el bean usando @Configuration:
Al probar, puede ver que las dos instancias de objetos de usuario creadas por el FactoryBean singleton son idéntico.
Dos instancias de objetos de usuario creadas por un FactoryBean no singleton no son idénticas.
Referencias:
baeldung - ¿Cómo utilizar Spring FactoryBean?