为什么Spring在调用之前实例化我的原型?

时间:2015-03-13 09:56:32

标签: spring hibernate

我需要将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实例化之前以编程方式修改数据源)

2 个答案:

答案 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;
    }    
}