Java动态代理:代理类与目标类混淆问题案例

原创 一时失言乱红尘 2024-12-04 18:06 76阅读 0赞

在Java的动态代理中,可能会遇到代理类与目标类混淆的问题。以下是一个简单案例:

  1. 原始代码(假设有一个类TargetClass):
    1. public class TargetClass {
    2. public void doSomething() {
    3. System.out.println("Doing something...");
    4. }
    5. }
  2. 创建动态代理类,这里使用CGLIB库:
    ```java
    import net.sf.cglib.proxy.Enhancer;
    import net.sf.cglib.proxy.MethodInterceptor;
    import net.sf.cglib.proxy.MethodProxy;

public class ProxyClass implements MethodInterceptor {
private Enhancer enhancer;
private Object targetObject;

  1. public ProxyClass(Class<T> targetClass) {
  2. this.enhancer = new Enhancer();
  3. this.targetObject = enhancer.create(targetClass);
  4. }
  5. @Override
  6. public Object intercept(Object object, Method method, Object[] args) throws Throwable {
  7. // 在方法执行前后添加操作
  8. String methodName = method.getName();
  9. if ("doSomething".equals(methodName))) {
  10. System.out.println("Before calling target method...");
  11. // 调用目标类的方法
  12. method.invoke(targetObject, args);
  13. System.out.println("After calling target method...");
  14. }
  15. return null;
  16. }
  17. public T getTargetClassInstance() {
  18. return (T) this.targetObject;
  19. }

}

  1. 3. 使用代理类调用目标方法:
  2. ```java
  3. public class Client {
  4. public static void main(String[] args) {
  5. // 创建代理对象
  6. ProxyClass proxy = new ProxyClass(TargetClass.class);
  7. // 调用目标方法,实际上通过代理来执行
  8. TargetClass target = proxy.getTargetClassInstance();
  9. target.doSomething();
  10. // 关闭代理
  11. proxy.close();
  12. }
  13. }

在这个案例中,代理类ProxyClass实现了CGLIB库中的MethodInterceptor接口。这样,在调用目标方法时,实际上是通过代理来执行的,从而达到混淆目标类的目的。在程序运行结束后,需要关闭代理以释放资源。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读