1

团队负责人想在 Entity 类中编写一些业务方法,例如:

@Entity
public class SomeProcess extends SomeProcessBase implements Serializable {

    @SomeInterceptor
    public void start() {
        //do some business logics
    }

    @SomeInterceptor
    public void abort() {
        // do some business logics
    }

    ...

}

我们可以使用CDI拦截器机制来拦截非上下文实体对象吗?

4

1 回答 1

1

答案是不。

下一个方向是转移到 BCEL。

经过几天的学习,我终于用BCEL完成了方法拦截。

粗略的解决方案: 1. 使用java Instrument框架在类加载时转换字节码。单击参考。2. 使用字节码操作库转换字节码,例如 ASM、Javassist 或 BCEL。在转换字节码的同时,手动编写目标java文件,并使用这些库提供的一些工具类生成java代码,该java代码可以从目标类文件创建字节码,经过一些封装和装箱和拆箱等,然后转换字节码部分将准备就绪。BCEL 提供了 BCELifier 类来生成这些 java 代码,并且字节码操作还提到了其他库的一些其他工具。3.尝试生命周期github.com上的开源项目,提供基于Java的生命周期描述语言,是一种使用Java描述UML状态机的元驱动风格。方法拦截请参考BCELClassFileTransformer.java 4.联系我获取更多帮助。

于 2013-10-08T12:04:46.317 回答