用于选择性类或方法的Java CGlib增强器
我想开发一个实用性类来截取我的项目中的一些方法。目前我的项目有120多个java文件,我想截取10个文件中的15个方法。如何使用Cglib增强器实现这一点 也可以说我有以下代码用于选择性类或方法的Java CGlib增强器,java,spring,cglib,Java,Spring,Cglib,我想开发一个实用性类来截取我的项目中的一些方法。目前我的项目有120多个java文件,我想截取10个文件中的15个方法。如何使用Cglib增强器实现这一点 也可以说我有以下代码 class A{ B b = new B(); C c = new C(): void m1(){ b.m2(); c.m3(); } } 我只想截取方法m1()和m3()。有可能吗?如果有,怎么做?Cglib通过在运行时为您的类型创建子类来工作。因此,您的建议不可能使用cglib。对于类A,cgl
class A{
B b = new B();
C c = new C():
void m1(){
b.m2();
c.m3();
}
}
我只想截取方法m1()和m3()。有可能吗?如果有,怎么做?Cglib通过在运行时为您的类型创建子类来工作。因此,您的建议不可能使用cglib。对于类
A
,cglib的增强器
创建了一个类似于以下内容的类:
class A$Proxy extends A {
MethodInterceptor interceptor;
@Override
void m1(){
interceptor.intercept("m1");
}
}
这样,cglib就可以调用您的代码而不是原始实现。但是,A
类的字段实例不是虚拟的,并且由于子类化方法,不能由cglib修改。使用cglib,实际上不会更改现有代码
相反,您应该研究如何使用Java代理,它允许您重新定义现有代码,以支持您正在寻找的AOP编程风格。有一些库比cglib更强大,比如我写的一个库。有一次,我在日志记录示例中写下了一个使用Byte Buddy的AOP示例:Cglib通过在运行时为您的类型创建子类来工作。因此,您的建议不可能使用cglib。对于类
A
,cglib的增强器
创建了一个类似于以下内容的类:
class A$Proxy extends A {
MethodInterceptor interceptor;
@Override
void m1(){
interceptor.intercept("m1");
}
}
这样,cglib就可以调用您的代码而不是原始实现。但是,A
类的字段实例不是虚拟的,并且由于子类化方法,不能由cglib修改。使用cglib,实际上不会更改现有代码
相反,您应该研究如何使用Java代理,它允许您重新定义现有代码,以支持您正在寻找的AOP编程风格。有一些库比cglib更强大,比如我写的一个库。有一次,我在日志记录示例中写下了一个使用Byte Buddy的AOP示例:您可以使用自定义运行时注释标记您的方法,例如@InterceptAround,使用MethodInterceptor回调创建代理(使用增强器),然后在java.lang.reflect.Method上尝试检索自定义注释,如果发现了,做点什么,否则-跳过。更方便的方法是使用SpringAOP。您可以创建方面并在特定的连接点(如注释、方法签名、包等)上激活它…您可以使用自定义运行时注释标记您的方法,例如@InterceptAround,使用MethodInterceptor回调创建代理(使用增强器),然后在java.lang.reflect.method上尝试检索自定义注释,如果发现了,做点什么,否则-跳过。更方便的方法是使用SpringAOP。您可以创建方面并在特定的连接点(如注释、方法签名、包等)上激活它。。。