JDK动态代理实现类,完成对实现类的业务增强

1、接口

public interface TestService {
    void test();
}

2、实现类

public class Test1Impl implements TestService {
    @Override
    public void test() {
        System.out.println("---------------test1");
    }
}

3、实现了InvocationHandler的处理器

public class TestHandler implements InvocationHandler {
    private Object object;

    public TestHandler(Object obj){
        this.object = obj;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println(method.getName() + "------------具体业务增强前");
        // 执行目标对象的方法
        Object invoke = method.invoke(object, args);
        System.out.println(method.getName() + "------------具体业务增强后");
        return invoke;
    }

    public static Object creatJdkProxy(Object targetObj){
        return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(), targetObj.getClass().getInterfaces(), new TestHandler(targetObj));
    }
}

4、调用

    @PostMapping(value = "/test")
    Result<StringResult> test(){
         // 目标对象
        Test1Impl test1Impl = new Test1Impl();
        // 生成的代理对象
        TestService testServiceProxy = (TestService)TestHandler.creatJdkProxy(test1Impl);
        testServiceProxy.test();
        return Result.okStringResult("ccc");
    }

 

posted @ 2023-02-16 21:41  joel1889  阅读(7)  评论(0)    收藏  举报