栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring boot jdk 动态代理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring boot jdk 动态代理

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

package Service;


public interface UserService {
    void user();
}

Service实现类

package Service.Impl;

import Service.UserService;


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;


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;
    }

    
    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;


public class Test {

    public static void main(String[] args) throws Exception {
        //1.这里类似于spring,简写哈:Spring - BeanDefine 根据里面的class信息进行反射创建对象
        Class userServiceClass = UserServiceImpl.class;
        UserServiceImpl userService = userServiceClass.newInstance();
        //这里相当于spring的bean对象,现在要在service方法前后增加日志,所以要用aop, 调用bean的后置处理器
        //创建代理对象 - 并返回,此时bean工厂里面的实例就是该代理对象
        UserService userServiceProxy = (UserService) createJdkProxy(userService);
        //调用方法
        userServiceProxy.user();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1003469.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号