【问题标题】:@DeclareMixin added methods not visible by other classes@DeclareMixin 添加了其他类不可见的方法
【发布时间】:2014-09-23 20:54:45
【问题描述】:

我第一次尝试使用@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。

【问题讨论】:

    标签: java aspectj ajdt


    【解决方案1】:

    我认为您需要在您的 Test 类中进行强制转换:

    ((CreatedBean)aa).setCreated(new Date());
    
    System.out.println(((CreatedBean)aa).getCreated().toString());
    

    IIRC 的原因是注解样式代码是为了用 javac 编译的,它不会知道DeclareMixin 的影响。

    【讨论】:

    • Ugg - 每次都需要施放是丑陋的。我知道在 AJ 语法中,我可以将实现声明为接口的一部分(内部静态方面),然后使用简单的declare parents: xxx implements yyy 应用接口。然后我不需要投射aa bean。有没有办法将两者结合起来?即:使用AJ语法添加接口实现(而不是注解样式),但保持实现和接口分开(各自在自己的.java文件中)?
    • 铸造解决了这个问题,但正如我所说,如果可能的话,我宁愿不用案例。 IIRC,使用 AJ 符号不需要我转换; Annotation 风格是否有等价物?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多