page contents

CgLib动态代理重复多次打印before()和after()方法的值

Pack 发布于 2020-02-08 18:01
阅读 506
收藏 0
分类:Java开发

我导入的包是org.springframework.cglib.proxy是不是有问题的?老师导入的是net.sf.cglib.proxy,但是我没找到有这个包导入,是不是要引入其他jar包的?
这是我的代码:
运行结果为什么会重复多次打印before()的输出值?



import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class CglibMeipo implements MethodInterceptor {

public Object getInstance(Class<?> clazz){ Enhancer enhancer=new Enhancer(); enhancer.setSuperclass(clazz); enhancer.setCallback(this); return enhancer.create(); }

@Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

before(); Object obj=methodProxy.invokeSuper(o,objects); after(); return obj; }

private void before(){ System.out.println("我是媒婆,我要给你找对象,现在已经确认你的需求"); System.out.println("开始物色"); }

private void after(){ System.out.println("OK的话,准备办事"); } }

测试类:



public class CglibTest { public static void main(String[] args) {

try {

Customer obj = (Customer) new CglibMeipo().getInstance(Customer.class); System.out.println(obj); obj.findLove(); } catch (Exception e) { e.printStackTrace(); }

} }

输出:

我是媒婆,我要给你找对象,现在已经确认你的需求
开始物色
我是媒婆,我要给你找对象,现在已经确认你的需求
开始物色
OK的话,准备办事
OK的话,准备办事
com.java.proxy.dynamicproxy.cglibproxy.Customer$$EnhancerByCGLIB$$62d4ff30@4cdf35a9
我是媒婆,我要给你找对象,现在已经确认你的需求
开始物色
儿子要求:肤白貌美大长腿
OK的话,准备办事
279
Pack
Pack

使用cglib代理需要2个包

	<dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.2.6</version>
        </dependency>
        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>6.1.1</version>
        </dependency>

代码没看出什么问题,你先把依赖换了试试

请先 登录 后评论