我第一次尝试使用@DeclareMixin,要么我做错了,要么某处有错误。
我已将示例代码发布到 github: https ://github.com/benze/AspectJError.git 。我也在这里粘贴一点点。
如果我使用反编译器查看 ApplyAspect.class 的编译代码,我可以看到 ajc 已正确添加到实现的接口中。但是,编译器在 Test 中抱怨 ApplyAspect 没有 setCreated() 或 getCreated() 方法。
此外,如果我尝试从命令行编译项目,我也会得到相同的编译错误。
我不确定我做错了什么,或者在其他地方是否存在 @DeclareMixin 指令的错误。
接口 CreatedBean.java:
public interface CreatedBean {
public Object getCreated();
public void setCreated(final Object created);
}
实现 CreatedBeanImpl.java:
public class CreatedBeanImpl implements CreatedBean{
private Object created;
public Object getCreated(){
return this.created;
}
public void setCreated(final Object created ){
this.created = created;
}
}
方面定义:
@Aspect
public class DeclareMixinAspect {
@DeclareMixin("com.benze.bo.ApplyAspect")
public CreatedBean auditableBeanMixin(){
return new CreatedBeanImpl();
}
}
建议上课(com.benze.bo pkg):
public class ApplyAspect {
private String name = "test class";
}
尝试使用 ApplyAspect 的类:
public class Test {
public static void main(String[] args) {
ApplyAspect aa = new ApplyAspect();
aa.setCreated(new Date());
System.out.println( aa.getCreated().toString());
System.out.println(aa.toString());
System.out.println("all done");
}
}
pom 非常基础,只添加了 aspectj 插件(和依赖项)。我正在使用 AJ 1.8.2。