На сайте 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?