我需要将sessionFactory设置为原型,因此我可以从代码中创建它。
<bean id="sessionFactoryResult"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" scope="prototype">
<property name="dataSource">
<ref bean="dataSourceResult" />
</property>
<property name="hibernateProperties" ref="hibernatePropertiesResult" />
<property name="packagesToScan" value="package.entity"/>
</bean>
稍后在我的代码中我有:
SessionFactory sessionFactory = (SessionFactory) ctx.getBean("sessionFactoryResult");
但是由于某些原因,Spring在应用程序的开头实例化了这个sessionFactory(并创建了数据库)...... 并且作为旁注:当我最终从代码中调用它时,hibernate不会重新创建数据库(我需要在任何sessionFactory实例化之前以编程方式修改数据源)
答案 0 :(得分:0)
Predrag Maric给出的答案,lazy-init =&#34; true&#34;在春季豆类,或@Lazy
答案 1 :(得分:0)
作为替代方案,如果您希望在bean的实例化链中获得更多控制权,则可以确定在其中实现Phased接口的实例化顺序。
http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/Phased.html
Excample。
@Service
public class FooSessionFactory implements Phased{
@Autowired
private SessionFactory sessionFactory;
@Override
public int getPhase() {
return -1;
}
}