spring学习之cglib代理Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type

在学习https://www.bilibili.com/video/av40807069/?p=49的过程中,生成代理对象,源码如下:

SomeServiceIml.java:

package com.liping.proxy.cglib;

public class SomeServiceIml {

      public String doSome() {
          System.out.println("let`s do something here!");
          return "abcd";
      }
}

MyIntercector.java:

package com.liping.proxy.interceptor;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class MyIntercector implements MethodInterceptor {
    private Object  target;
    public MyIntercector(Object target) {
        super();
        this.target = target;
    }
    public MyIntercector( ) {


    }
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        System.out.println("==========intercept==========");
        Object result = null;
        // TODO Auto-generated method stub
        result = method.invoke(target, args);
        return result;
    }

}

 

ProxyFactory .java:

package com.liping.proxy.interceptor;

import com.liping.proxy.cglib.SomeServiceIml;

import net.sf.cglib.proxy.Enhancer;

public class ProxyFactory {
    public  Object createProxy(Object target) {
        Enhancer en = new Enhancer();
        en.setSuperclass(SomeServiceIml.class);
        en.setCallback(new MyIntercector(target));
        return en.create();
    }

}

Mytest .java:

package com.liping.proxy.test;
import com.liping.proxy.cglib.SomeServiceIml;
import com.liping.proxy.interceptor.ProxyFactory;

public class Mytest {

    public  static  void main(String [] args) {
        // TODO Auto-generated method stub

        SomeServiceIml  target = new SomeServiceIml();
        ProxyFactory  factory = new ProxyFactory();
        SomeServiceIml  proxy = (SomeServiceIml) factory.createProxy(target);
        String str = proxy.doSome();
        System.out.println("通过代理对象!"+str);
    }
}

 

执行Mytest,报错信息如下:

Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type
    at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:180)
    at net.sf.cglib.core.KeyFactory.<clinit>(KeyFactory.java:66)
    at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
    at com.liping.proxy.interceptor.ProxyFactory.createProxy(ProxyFactory.java:9)
    at com.liping.proxy.test.Mytest.main(Mytest.java:12)
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 5 more

解决方法,参考https://www.cnblogs.com/gl-developer/p/7115644.html

asm 1.5.3.jar 匹配 cglib-2.1.3.jar 
asm-2.X.jar asm-3.x.jar 匹配  cglib-nodep-2.1_3.jar 

在网上下载并手动引入asm.jar文件。把asm.jar文件添加到项目路径类,运行,然后就正常了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.NoClassDefFoundError: org/springframework/cglib/proxy/Enhancer 是一个Java运行时异常,表示在运行时找不到指定的类。具体来说,这个错误是由于缺少 org.springframework.cglib.proxy.Enhancer 类所导致的。 org.springframework.cglib.proxy.Enhancer 是 Spring Framework 中的一个类,它用于创建动态代理对象。动态代理是一种设计模式,它允许在运行时创建一个代理对象,该代理对象可以拦截并处理被代理对象的方法调用。 当出现 java.lang.NoClassDefFoundError: org/springframework/cglib/proxy/Enhancer 错误时,通常是因为缺少了 Spring Framework 的相关依赖包。要解决这个问题,你需要确保在项目的构建路径中包含了正确的 Spring Framework 依赖。 如果你正在使用 Maven 进行项目管理,可以在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>版本号</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>版本号</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>版本号</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>版本号</version> </dependency> ``` 请将 "版本号" 替换为你所使用的 Spring Framework 版本。 如果你不使用 Maven,可以手动下载所需的 JAR 文件,并将其添加到项目的构建路径中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值