gpt4 book ai didi

java - @DeclareMixin 添加其他类不可见的方法

转载 作者:行者123 更新时间:2023-12-01 12:30:03 26 4
gpt4 key购买 nike

我第一次尝试使用@DeclareMixin,要么我做错了什么,要么某个地方有错误。

我已将示例代码发布到 github:https://github.com/benze/AspectJError.git 。我也将一些小片段粘贴在这里。

如果我使用反编译器查看ApplyAspect.class的编译代码,我可以看到ajc已正确添加到实现的接口(interface)中。但是,编译器在 Test 中提示 ApplyAspect 没有 setCreated() 或 getCreated() 方法。

此外,如果我尝试从命令行编译项目,也会遇到相同的编译错误。

我不确定我做错了什么,或者 @DeclareMixin 指令是否在其他地方存在错误。

接口(interface)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();
}
}

被建议的类(class)(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。

最佳答案

我认为你需要在测试类中进行强制转换:

((CreatedBean)aa).setCreated(new Date());

System.out.println(((CreatedBean)aa).getCreated().toString());

IIRC 原因是注释样式代码旨在用 javac 进行编译,而 javac 不知道 DeclareMixin 的影响。

关于java - @DeclareMixin 添加其他类不可见的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com