我第一次尝试使用@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。
答案 0 :(得分:1)
我认为您需要在Test类中使用强制转换:
((CreatedBean)aa).setCreated(new Date());
System.out.println(((CreatedBean)aa).getCreated().toString());
IIRC原因是注释样式代码可以与javac一起编译,而javac不会知道DeclareMixin
的影响。