0

我有一个由 Hibernate、Spring 和 Jersey 组成的堆栈。

虽然很多东西都是 RESTFUL 的,但并不是我们应用程序中的所有东西都是(而且不可能,由于各种原因。我意识到我在某些地方破坏了 REST 最佳实践。)

我需要做两件事,但无法弄清楚如何让这两件事都发生。

在我的 application-context.xml 我有以下

  <!-- Configure the entity manager factory bean -->
  <bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
    <property name="packagesToScan" value="com.mystuff.model"/>
     <property name="jpaProperties">
      <props>
        <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
        <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
       <prop key="hibernate.format_sql">true</prop>
        <prop key="hibernate.hbm2ddl.auto">create</prop>
        <prop key="hibernate.show_sql">true</prop>
        <prop key="hibernate.hbm2ddl.import_files">data.sql</prop>
      </props>
    </property>

这通常会为我将一些休眠数据加载到数据库中。但是,我还需要在服务中初始化一些内存结构。

尽管调用了 super.initiate() 或实现 AbstractResourceModelListener 然后提供 onLoaded(AbstractResourceModelContext modelContext) 我尝试让我的服务扩展 ServletContainer 并覆盖启动的那一刻,我得到空指针,因为我的初始数据由 data.sql 提供不存在.

我怎样才能正确地做到这一点,这样我既可以加载我的 data.sql,又可以在加载服务时执行一些语句?

(如果有人好奇,是的,该服务是@Singleton)

任何帮助表示赞赏。

4

1 回答 1

0

因此,这里的正确答案是使用@PostConstruct,尽管 Eclipse 可能会给您关于限制和库的警告。我不确定为什么会出现该警告,或者为什么它会继续工作,但 @PostConstruct 是在 Spring 中不破坏其他加载的方法。

(也就是说,如果你没有被固定,在外面进行初始化并注入它会更加 RESTFUL 和更好,并且不需要@Singleton,但我在问题和答案中都假设它不是你的选择原因。)

于 2013-11-05T16:50:01.447 回答