¿Cuál es la forma correcta de usar beans de fábrica en las clases @Configuration
?Primavera: ¿usar beans de fábrica en la configuración?
Supongamos que tengo lo siguiente para SessionFactory
:
@Bean
public AnnotationSessionFactoryBean sessionFactory() {
AnnotationSessionFactoryBean factory = new AnnotationSessionFactoryBean();
// set up properties etc.
return factory;
}
En este momento este método devuelve una fábrica de beans, que no implementa SessionFactory
. Si lo uso en otro bean con @Autowired
como SessionFactory
, funciona muy bien y la obtiene de la fábrica de frijol:
@Controller
public class MyController {
@Autowired SessionFactory sessionFactory;
// ...
}
supongo que eso está bien.
Sin embargo, se convierte en un problema si quiero usar la SessionFactory
en la misma clase de configuración:
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager man = new HibernateTransactionManager();
// Ideal - doesn't work because sessionFactory() return type doesn't match:
// SessionFactory sessionFactory = sessionFactory();
// Is this one correct?
// SessionFactory sessionFactory = (SessionFactory) sessionFactory().getObject();
man.setSessionFactory(sessionFactory);
return man;
}
¿Cuál es la forma correcta para implementar este tipo de dependencia?
no se requieren afterPropertiesSet()? –
No, Spring es lo suficientemente inteligente como para realizar todas las inicializaciones necesarias después de llamar al método '@ Bean' y antes de devolver el bean. Así que 'InitializingBean',' DisposableBean', '@ PostConstruct', etc. son reconocidos y tratados adecuadamente. De hecho, siempre he encontrado que llamar a 'afterPropertiesSet' es un poco complicado, porque es responsabilidad del contenedor. –
Además, ver mi edición, encontré otra solución. –