我使用的是Roo 1.3.2。我有一个抽象类和一个具体实现如下:
@RooJavaBean
@RooToString
@RooJpaActiveRecord(inheritanceType="TABLE_PER_CLASS")
public abstract class Task {
@Size(min = 2)
private String name;
public abstract void execute(Object... parameters);
}
@RooJavaBean
@RooToString
@RooJpaActiveRecord
public class ImportLoadPlanTask extends Task {
@Size(min = 2)
private String svnFile;
@Override
public void execute(Object... parameters){
....
}
}
但是,生成的ActiveRecord.aj文件会生成以下代码
public static final EntityManager Task.entityManager() {
EntityManager em = new Task() {
public void execute(java.lang.Object parameters) {
throw new UnsupportedOperationException();
}
}.entityManager;
if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
return em;
}
来自IDE的错误消息是:
The type new Task(){} must implement the inherited abstract Task.execute(Object ...)
如果我从Task类中删除抽象关键字,那么由于Roo没有尝试生成上面列出的代码,错误就会消失。
我怎样才能让它发挥作用?这是Roo虫吗?
这是一个检测parameters
参数类型的错误。请你报告一下春日的事好吗?
要解决它,只需使用推入:
public abstract class Task {
@Size(min = 2)
private String name;
public abstract void execute(Object... parameters);
// Push-in entityManager method from .aj file
public static final EntityManager entityManager() {
EntityManager em = new Task() {
public void execute(Object... parameters) {
throw new UnsupportedOperationException();
}
}.entityManager;
if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
return em;
}
}
这就是Spring Roo的要点之一:你总是可以按照自己的方式来做!
祝你好运!