Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于选择性类或方法的Java CGlib增强器_Java_Spring_Cglib - Fatal编程技术网

用于选择性类或方法的Java 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

我想开发一个实用性类来截取我的项目中的一些方法。目前我的项目有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
,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。您可以创建方面并在特定的连接点(如注释、方法签名、包等)上激活它。。。