你会注意到LocalSessionFactoryBeanimplements FactoryBean<SessionFactory>。这个接口被 Spring 用来创建其他类型的 bean。在这种情况下,一个SessionFactory.
简单来说,Spring 会调用将返回该getObject()实例的实例。为了说明发生了什么,请采用 Java config 声明 bean 的方式。LocalSessionFactoryBeanSessionFactory
@Bean
public SessionFactory sessionFactory() throws IOException {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource());
Properties hibernateProperties = new Properties();
sessionFactoryBean.setHibernateProperties(hibernateProperties);
sessionFactoryBean.afterPropertiesSet();
return sessionFactoryBean.getObject();
}
您也可以返回一个LocalSessionFactoryBean实例,而 Spring 仍然会调用该getObject()方法并使用实例填充其上下文SessionFactory。
有很多这样的FactoryBean实现对 Spring 开发人员很有用。