CGLib缺少jar出现 java.lang.ClassNotFoundException: org.objectweb.asm.Type

CGLib实现动态代理区别于JDK动态代理,不需要目标类实现任何接口,是通过生成代理类子类的方式,而且据说速度要快于JDK动态代理。所以我想要试验一下CGlib的动态代理,网上找了些例子,自己动手写了一个Demo,运行时抛出以下异常

这个异常说明的很清楚,因为使用了CGlib的Enhancer类,这个类用于为非接口类型创建一个Java代理,类里面使用了org.objectweb.asm.Type。ASM是一个字节码解析的工具,导入ASM的jar即可解决该问题,PS:如果使用Maven构建项目就不会出现这个问题

在这里贴一下我写的Deam,目标类:

public class Cat {

    public void say() {
        System.out.println("我是一只猫");
    }

}

代理类:

import java.lang.reflect.Method;

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

public class CatProxy implements MethodInterceptor{

    //目标对象,这里使用Object
    private Object target;

    /**
     * 代理对象创建过程
     * @param target
     * @return
     */
    public Object getInstance(Object target) {
        this.target = target;
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(target.getClass());
        //public interface MethodInterceptor extends Callback 所以这里可以给this
        enhancer.setCallback(this);
        Object proxy = enhancer.create();
        return proxy;  //返回代理对象
    }

    @Override
    public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
        System.out.println("---------doSomething-------Start");
        Object proxy = arg1.invoke(target, arg2);
        System.out.println("---------doSomething-------End");
        return proxy;
    }

    public static void main(String[] args) {
        Cat cat = (Cat) new CatProxy().getInstance(new Cat());
        cat.say();
    }

}

更多关于CGLib的介绍可以参照以下博文:

https://www.cnblogs.com/mr-long/p/5889054.html

http://www.cnblogs.com/icejoywoo/archive/2011/06/05/2072970.html

原文地址:https://www.cnblogs.com/lz2017/p/10189875.html

时间: 2024-10-12 16:25:43

CGLib缺少jar出现 java.lang.ClassNotFoundException: org.objectweb.asm.Type的相关文章

使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常【补充】

援引:使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常 援引:class net.sf.cglib.core.DebuggingClassWriter has interface org.objectweb.asm.ClassVisitor as super class 源环境: IDE:IntelliJ IDEA 项目目的:测试动态代理 -- CGLIB 项目属性:Java Application 项目结构: 被

Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor

1.错误描写叙述 三月 15, 2015 6:50:23 下午 org.apache.catalina.core.StandardContext filterStart 严重: Exception starting filter struts2 java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor at org.apache.struts2.convention.PackageBasedActionConfigBuilder

Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.commons.EmptyVisitor

1.错误叙述性说明 2014-7-13 1:45:53 org.apache.struts2.spring.StrutsSpringObjectFactory info 信息: ... initialized Struts-Spring integration successfully 2014-7-13 1:45:54 org.apache.catalina.core.StandardContext filterStart 严重: Exception starting filter strut

Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type

问题描述 将项目挂载到 Myeclipse 的 tomcat 上,启动 tomcat ,报错"Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type" 问题原因 缺少 jar 包 解决方案 第一种方案: 1.将需要的第三方包拷贝进libs 文件夹. 2.将引用的第三方包,添加进工作的build path -->工程上右键 --

Hibernate异常:java.lang.NoClassDefFoundError: org/objectweb/asm/Type

解决方法:将Hibernate lib包下的asm.jar添加到项目的library中. 解决方法:将Hibernate lib包下的cglib-2.1.3.jar添加到项目的library中.  Hibernate异常:java.lang.NoClassDefFoundError: org/objectweb/asm/Type

java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

异常完整信息 严重: Servlet.service() for servlet RegServlet threw exception java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V at net.sf.cglib.core.ClassEmitter.begi

Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V

启动web应用时出现以下异常: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(A

java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V

参考链接:https://blog.csdn.net/baicp3/article/details/13512237 参考链接https://blog.csdn.net/sinat_32034679/article/details/76572613?utm_source=blogxgwz5 除了以上链接中可能会出现的问题外,我这边是因为使用了多创建了相同名称的实体类,导致跳转url的时候报java.lang.NoSuchMethodError: org.objectweb.asm.ClassWr

Tomcat中使用commons-io-2.5发生的错误java.lang.ClassNotFoundException: org.apache.commons.io.IOUtils

关键词:IntelliJ IDEA.Tomcat.commons-io-2.5.jar.java.lang.ClassNotFoundException: org.apache.commons.io.IOUtils 1.错误提示信息 图1 运行登录时错误信息 //Tomcat Localhost Log信息 org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Servlet] in