spring boot jdk 动态代理

话不多说直接上代码
Service接口

package Service;

/**
 * @author 黎荣右
 * @date 2022/7/3 10:59
 */
public interface UserService {
    void user();
}

Service实现类

package Service.Impl;

import Service.UserService;

/**
 * @author 黎荣右
 * @date 2022/7/3 11:00
 */
public class UserServiceImpl implements UserService {
    public void user() {
        System.out.println("原来的功能");
    }
}

代理对象

package Proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author 黎荣右
 * @date 2022/7/3 11:03
 */
public class UserServiceProxy implements InvocationHandler {

    private Object o;//真实的对象

    public UserServiceProxy(Object object) {
        this.o = object;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("原来功能前要增加的功能:--------before");
        Object invoke = method.invoke(o, args); //执行对象的方法
        System.out.println("原来功能后要增加的功能:--------after");
        return invoke;
    }

    /**
     * 第一种 jDk  创建代理,需要时调用即可
     */
    public static Object createJdkProxy(Object currentObj) {
        return Proxy.newProxyInstance(currentObj.getClass().getClassLoader(),
                currentObj.getClass().getInterfaces(),
                new UserServiceProxy(currentObj));
    }
}

测试

import Service.Impl.UserServiceImpl;
import Service.UserService;

import static Proxy.UserServiceProxy.createJdkProxy;

/**
 * @author 黎荣右
 * @date 2022/7/3 11:25
 */
public class Test {

    public static void main(String[] args) throws Exception {
        //1.这里类似于spring,简写哈:Spring - BeanDefine 根据里面的class信息进行反射创建对象
        Class<UserServiceImpl> userServiceClass = UserServiceImpl.class;
        UserServiceImpl userService = userServiceClass.newInstance();
        //这里相当于spring的bean对象,现在要在service方法前后增加日志,所以要用aop, 调用bean的后置处理器
        //创建代理对象 - 并返回,此时bean工厂里面的实例就是该代理对象
        UserService userServiceProxy = (UserService) createJdkProxy(userService);
        //调用方法
        userServiceProxy.user();
    }
}

版权声明:本文为m0_56385869原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。