Spring - использование фабричных бинов в конфигурации?

Как правильно использовать фабричные компоненты в классах @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;
}

Как правильно реализовать такую ​​зависимость?

12
задан Konrad Garus 22 June 2011 в 21:35
поделиться