Использование Morphia с Spring

На сайте Morphia в Google Code говорится, что он "отлично работает с Guice, Spring и другими DI-фреймворками".

В данный момент я изучаю Spring, поэтому просто экспериментирую с подключением этих двух инструментов. Я создал User POJO для хранения пользовательских объектов с помощью Morphia в MongoDB. Я также создал класс UserDAO, расширяющий класс BasicDAO из Morphia для доступа к объектам.

XML конфигурации контекста моего приложения Spring выглядит следующим образом:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
           xmlns:aop="http://www.springframework.org/schema/aop">

      <bean class="java.lang.String" id="mongoDb">
        <constructor-arg value="test"/>
      </bean>

      <bean class="com.google.code.morphia.Morphia" id="morphia" />
      <bean class="com.mongodb.Mongo" id="mongo"/>
      <bean class="hu.inagy.testspring.daos.UserDAO" id="userDao">
        <constructor-arg ref="morphia" index="0" />
        <constructor-arg ref="mongo" index="1" />
        <constructor-arg ref="mongoDb" index="2" />
      </bean>

    </beans>

У меня есть простой основной класс для проверки функциональности:

  public class App 
  {
      public static void main( String[] args )
      {
          ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/app-context.xml");
          UserDAO userDao = (UserDAO) applicationContext.getBean("userDao");

          userDao.deleteByQuery(userDao.createQuery());

          User user = new User();
          user.setName("Test");
          userDao.save(user);

          User ret = userDao.find().get();
          System.out.println("Saved user is: "+ret);
      }
  }

Это отлично работает, однако я не знаю, все ли я сделал так, как должно быть. Например, я не вызывал ensureIndexes() и ensureCaps() в хранилище данных. В моем коде также нет явного вызова сопоставления для POJO в объекте Morphia.

Это делается для меня автоматически, или я должен делать другие вещи, чтобы правильно использовать Morphia с Spring?


person NagyI    schedule 19.03.2011    source источник


Ответы (1)


Я не использую Spring, но в этих статьях, кажется, говорится именно о том, что вам нужно, о том, что делать при запуске приложения: http://leshazlewood.com/2007/07/30/spring-application-bootstrap-data/

Вы можете сделать Datastore.ensureIndexes/Caps() там.

Вы также можете прочитать эту ветку об использовании @Autowire и аннотаций вместо xml, если вам это нравится.

http://groups.google.com/group/morphia/browse_thread/thread/1013b17963f29468

person Scott Hernandez    schedule 20.03.2011