我正在尝试使用morphia框架启动spring应用程序来创建一些与mongodb一起使用的web应用程序
好吧,我有一些抽象的实体public abstract class AbstractEntity {
@Id
protected ObjectId id;
// getters, setters
}
我也有这个抽象实体的抽象Dao
public abstract class AbstractDao<T extends AbstractEntity> extends BasicDAO<T, ObjectId> {
protected AbstractDao(Mongo mongo, Morphia morphia, String dbName) {
super(mongo, morphia, dbName);
}
//some methods
}
我也有一些抽象行动
public abstract class AbstractAction {
protected ActionType actionType;
protected int dynamicWeight;
protected Date createDate;
// getters, setters
}
我有一些更具体的实体,比如在列表中存储一些动作的动作实体
public abstract class ActionEntity<T extends AbstractAction> extends AbstractEntity {
protected List<T> actions;
// getters, setters
}
动作可以是喜欢,评论等,他们有自己的类,比如
public class LikeAction extends AbstractAction implements ICombinable {
protected ObjectId authorId;
protected ObjectId sourceId;
//getters, setters and overrided equals();
}
最后,我有实体用于存储,例如喜欢
public class LikeActionEntity extends ActionEntity<LikeAction> {
}
和dao这样的实体
public class LikeActionDao extends AbstractDao<LikeActionEntity> {
protected LikeActionDao(Mongo mongo, Morphia morphia, String dbName) {
super(mongo, morphia, dbName);
}
}
在应用程序上下文中我有这样的bean
<bean class="com.foo.app.dao.action.LikeActionDao" id="likeActionDao">
<constructor-arg ref="mongo" index="0"/>
<constructor-arg ref="morphia" index="1"/>
<constructor-arg ref="database" index="2"/>
</bean>
<bean class="com.mongodb.Mongo" id="mongo">
<constructor-arg value="127.0.0.1:27017" index="0" />
</bean>
<bean id="morphia" class="com.google.code.morphia.Morphia" />
<bean class="java.lang.String" id="database">
<constructor-arg value="database" />
</bean>
但是当我尝试运行spring应用程序时,我会得到下一个异常
线程“main”中的异常org.springframework.beans.factory.BeanCreationException: 在类路径资源[app-config.xml]中定义名为'likeActionDao'的bean时出错:bean的实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化bean类 [com.foo.app.dao.action.LikeActionDao]:构造函数抛出异常;嵌套 异常是java.lang.RuntimeException:错误的类型,没有参数化......
我做错了什么?
答案 0 :(得分:1)
似乎这是morhia issue
尽量不要使用AbstractDao并直接从BasicDAO扩展你的LikeActionDao。 还尝试使LikeActionEntity不参数化。
答案 1 :(得分:0)
您拥有的配置文件缺少数据库的配置。
<bean class="java.lang.String" id="database">
<constructor-arg value="database" /> </bean>
您可能想为其定义一些值。