04-cglib(code generator library)代理(没有接口)

1 UserServiceProxyFactory4代码

package www.test.c_proxy;

import java.lang.reflect.Method;

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

import www.test.service.UserService;
import www.test.service.UserServiceImpl;

public class UserServiceProxyFactory4 implements MethodInterceptor {

    public UserService getUserServiceProxy(){
        Enhancer en = new Enhancer(); //帮我们生成代码对象
        en.setSuperclass(UserServiceImpl.class); //设置对谁进行代理
        en.setCallback(this); //代理要做什么
        UserService us = (UserService) en.create(); //创建代理对象
        return us;
    }
    
    @Override
    public Object intercept(Object proxyObj, Method method, Object[] arg, MethodProxy methodProxy) throws Throwable {
        System.out.println("目标方法前面的操作");
        //执行原有方法
        Object invokeSuper = methodProxy.invokeSuper(proxyObj, arg);
        System.out.println("目标方法之后的操作");
        return invokeSuper;
    }

}

2 测试

package www.test.c_proxy;

import org.junit.Test;

import www.test.service.UserService;
import www.test.service.UserServiceImpl;

public class Demo3 {

    @Test
    public void fun1(){
        UserServiceProxyFactory4 proxyFactory = new UserServiceProxyFactory4();
        UserService usProxy = proxyFactory.getUserServiceProxy();
        usProxy.find();
        
        //判断代理对象是否属于被代理对象类型
        //代理对象继承了被代理对象==>true
        System.out.println(usProxy instanceof UserServiceImpl);//true;
    }
}
原文地址:https://www.cnblogs.com/jepson6669/p/8540813.html