是否可以使用CDI拦截器拦截来自实体的方法调用?

时间:2013-09-10 12:34:34

标签: jpa cdi

团队负责人希望在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拦截机制拦截非上下文实体对象吗?

1 个答案:

答案 0 :(得分:0)

答案是否定的。

接下来的方向是转向BCEL。

经过几天的研究,我终于完成了BCEL以实现方法拦截。

粗略的解决方案:  1.使用java instrument framework在类加载时转换字节码。 Click Reference。  2.使用bytecode manipulation lib转换字节代码,例如ASM,Javassist或BCEL。在转换字节码时,手动编写目标java文件,并使用这些库提供的一些工具类生成可以从目标类文件创建字节码的java代码,经过一些封装和装箱和拆箱等后,然后转换字节码部分准备就绪。 BCEL提供BCELifier类来生成那些java代码,bytecode manipulation也提到了其他libs的其他工具。  3.在github.com上尝试Lifecycle开源项目,它提供基于Java的生命周期描述语言,它使用Java来描述具有元驱动风格的UML状态机。对于方法拦截,请参阅BCELClassFileTransformer.java  4.与我联系以获得更多帮助。

相关问题