javaee spring jdk动态代理

jdk动态代理

package com.test.jdkProxy;

public interface IUsersService {

    public void insert();
}

package com.test.jdkProxy;

//目标类
public class UsersService implements IUsersService {

    @Override
    public void insert() {
        System.out.println("添加用户");
    }
}

package com.test.jdkProxy;

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

//代理类生成器
public class Handler implements InvocationHandler {

    //存放目标对象
    Object subject;

    public Handler(Object subject)
    {
        this.subject=subject;
    }

    //根据传递进来的目标对象 生成一个代理对象 返回
    public static Object bind(Object subject)
    {
        return Proxy.newProxyInstance(Handler.class.getClassLoader(),
                subject.getClass().getInterfaces(),
                new Handler(subject));
    }

    //实现代理类中重写接口中的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        //增强对象
        System.out.println("执行开始的时间:"+new Date());
        //调用目标对象的方法
        Object object=method.invoke(subject,args);

        System.out.println("执行结束的时间:"+new Date());
        return object;
    }
}


测试

package com.test.jdkProxy;

import org.junit.Test;

public class TestJdkProxy {

    //测试jdk自带动态代理生成
    @Test
    public void test()
    {
        IUsersService usersServiceProxy=(IUsersService) Handler.bind(new UsersService());

        usersServiceProxy.insert();

    }
}

你可能感兴趣的:(Mac开发,java,java-ee,spring)