我想第一次使用@DeclareMixin,並且我做的是不正確的事情,或者某處存在錯誤。@DeclareMixin添加了其他類不可見的方法
我已經將我的示例代碼發佈到github上:https://github.com/benze/AspectJError.git。我也在這裏粘貼了一些小東西。
如果我使用反編譯器查看ApplyAspect.class的編譯代碼,我可以看到ajc已正確添加到已實現的接口中。 但是,編譯器在測試中抱怨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");
}
}
聚甲醛是非常基本的,只有AspectJ的插件(和依賴性)加入。我正在使用AJ 1.8.2。
Ugg - 需要每次投射都很難看。我知道在AJ語法中,我可以將實現聲明爲接口的一部分(內部靜態方面),然後只需使用一個簡單的'declare parents:xxx implements yyy'應用接口。然後我不需要投下'aa'豆。有沒有辦法將兩者結合起來?即:使用AJ語法添加接口實現(而不是註釋樣式),但保持實現和接口分離(每個都在它自己的.java文件中)? – 2014-09-24 04:51:28
投射解決了這個問題,但正如我所說的,如果可能的話,我寧願不必去處理。 IIRC,使用AJ表示法不需要我施放;在Annotation風格中是否有相同的內容? – 2014-09-24 15:04:54