| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 445 人关注过本帖
标题:cglib出现java.lang.NoClassDefFoundError求指教
只看楼主 加入收藏
郭俊森1234
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2018-3-25
结帖率:0
  已结贴   问题点数:20  回复次数:8   
cglib出现java.lang.NoClassDefFoundError求指教
被代理的类:
public class User {
    private int age;
    private String name;
    public User() {
    }
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int age() {
        return age;
    }
    public String name() {
        return name;
    }
    public void run() {
        System.out.println("我的run方法执行了");
    }
    public void test() {
        System.out.println("我的test方法执行了");
    }
    public String toString() {
        return name + "=" + age;
    }
}
生成被代理类的子类作为代理类:
package CGLIB;

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 MyMethodInterceptor implements MethodInterceptor{
    public Object target;
    public Object getInstance(Object target) {
        this.target = target;
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(this.target.getClass());
        enhancer.setCallback(this);
        return enhancer.create();
    }

    @Override
    public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
        Object b = arg3.invokeSuper(arg1,arg2);
        return b;
    }
}
使用:
package CGLIB;

public class Main {
    public static void main(String[] args) {
        MyMethodInterceptor mmi = new MyMethodInterceptor();
        User user = (User)mmi.getInstance(new User());
        user.run();
    }
}
错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/objectweb/asm/Type
    at net.sf.cglib.core.TypeUtils.parseType(TypeUtils.java:184)
    at net.sf.cglib.core.KeyFactory.<clinit>(KeyFactory.java:66)
    at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
    at CGLIB.MyMethodInterceptor.getInstance(MyMethodInterceptor.java:13)
    at CGLIB.Main.main(Main.java:6)
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 5 more

2018-03-30 16:13
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:383
专家分:1679
注 册:2018-2-6
  得分:20 
Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type

假如人生没有梦想,和咸鱼有什么区别!
2018-03-30 16:31
郭俊森1234
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2018-3-25
  得分:0 
我是从官网上面下载的应该不会出现类找不到,同时这个是用于测试的,只用了一个包不会出现架包冲突,这是什么原因导致的呢
2018-03-30 18:48
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:383
专家分:1679
注 册:2018-2-6
  得分:0 
程序代码:
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 MyMethodInterceptor implements MethodInterceptor {
    public Object target;

    public Object getInstance(Object target) {
        this.target = target;
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(this.target.getClass());
        enhancer.setCallback(this);
        return enhancer.create();
    }

    @Override
    public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
        Object b = arg1.invoke(target, arg2);
        return b;
    }
}

假如人生没有梦想,和咸鱼有什么区别!
2018-03-30 19:04
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:383
专家分:1679
注 册:2018-2-6
  得分:0 
回复 4楼 疯狂的小a
代理的时候,传参错了

假如人生没有梦想,和咸鱼有什么区别!
2018-03-30 19:04
郭俊森1234
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2018-3-25
  得分:0 
通过尝试你那种修改方法不起作用。
2018-03-30 21:17
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:383
专家分:1679
注 册:2018-2-6
  得分:0 
为什么我的可以....

假如人生没有梦想,和咸鱼有什么区别!
2018-03-31 13:31
郭俊森1234
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2018-3-25
  得分:0 
不知道你能够将你使用的包发给我我看是不是包的原因,我qq2064253891
2018-03-31 19:27
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:383
专家分:1679
注 册:2018-2-6
  得分:0 
程序代码:
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 MyMethodInterceptor implements MethodInterceptor {
    public Object target;

    public Object getInstance(Object target) {
        this.target = target;
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(this.target.getClass());
        enhancer.setCallback(this);
        return enhancer.create();
    }

    public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {
        Object b = arg1.invoke(target, arg2);
        return b;
    }
   
}

假如人生没有梦想,和咸鱼有什么区别!
2018-04-01 08:38







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026934 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved