JAVA 动态代理之jdk动态代理

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-01 06:18:28

前言

jdk动态代理被代理类必须是接口类

创建接口UserDao

public interface UserDao {

    void save();

    void find();
}

创建接口实现类UserDaoImpl

public class UserDaoImpl implements UserDao {

    public void save() {
        System.out.println("保存数据成功");
    }

    public void find() {
        System.out.println("获取数据成功");
    }
}

创建jdk动态代理类

/**
 * 动态代理实现类
 */
public class ProxyFactory {
    private Object target = null;

    public ProxyFactory(Object target) {
        this.target = target;
    }

    public Object getNewInstance() {
        Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                String methodName = method.getName();
                Object result = null;
                if("find".equals(methodName)) {
                    result = method.invoke(target, args);
                } else {
                    System.out.println("开启事务");
                    result = method.invoke(target, args);
                    System.out.println("结束事务");
                }
                return result;
            }
        });
        return proxy;
    }
}

动态代理测试

/**
 * JDK动态代理实现
 */
public class Action {

    public static void  main(String[] args) {
        UserDao userDao = new UserDaoImpl();
        UserDao userDaoProxy = (UserDao)new ProxyFactory(userDao).getNewInstance();
        System.out.println("JDK动态代理");
        userDaoProxy.save();

        userDaoProxy.find();

    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!