Как правильно использовать фабричные компоненты в классах @Configuration
?
Предположим, у меня есть следующее для SessionFactory
:
@Bean
public AnnotationSessionFactoryBean sessionFactory() {
AnnotationSessionFactoryBean factory = new AnnotationSessionFactoryBean();
// set up properties etc.
return factory;
}
Сейчас этот метод возвращает фабрику компонентов, которая не реализует SessionFactory
. Если я использую его в другом bean-компоненте с @Autowired
как SessionFactory
, он работает нормально и получает его от bean-factory:
@Controller
public class MyController {
@Autowired SessionFactory sessionFactory;
// ...
}
Думаю, это нормально.
Однако это становится проблемой, если я хочу использовать SessionFactory
в том же классе конфигурации:
@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;
}
Как правильно реализовать такую зависимость?