博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代理模式---动态代理之JDK
阅读量:5172 次
发布时间:2019-06-13

本文共 2067 字,大约阅读时间需要 6 分钟。

接口类UserDao:

package com.ant.jdk8.proxy;public interface UserDao {    void save();}

接口类EmployeeDao:

package com.ant.jdk8.proxy;public interface EmployeeDao {    void add();}

目标类UserDaoImpl:

package com.ant.jdk8.proxy;public class UserDaoImpl implements UserDao {    @Override    public void save() {        System.out.println("保存用户");    }}

目标类EmployeeDaoImpl:

package com.ant.jdk8.proxy;public class EmployeeDaoImpl implements EmployeeDao {    @Override    public void add() {        System.out.println("添加雇员信息");    }}

代理类ProxyFactory

package com.ant.jdk8.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyFactory {    //维护一个目标对象    private Object target;    public ProxyFactory(Object target){        this.target = target;    }    //生成目标对象的代理对象    public Object getProxyInstance(){        return Proxy.newProxyInstance(                target.getClass().getClassLoader(),                target.getClass().getInterfaces(),                new InvocationHandler(){                    @Override                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {                        System.out.println("---开始事务---");                        Object object = method.invoke(target, args);                        System.out.println("---提交事务---");                        return object;                    }                });    }}

测试类APP:

package com.ant.jdk8.proxy;public class App {    public static void main(String[] args) {        //目标对象        UserDao target = new UserDaoImpl();        //代理对象        UserDao proxy = (UserDao) new ProxyFactory(target).getProxyInstance();        proxy.save();        System.out.println("==========================");        //目标对象        EmployeeDao target2 = new EmployeeDaoImpl();        //代理对象        EmployeeDao proxy2 = (EmployeeDao)new ProxyFactory(target2).getProxyInstance();        proxy2.add();    }}

JDK动态代理总结:

代理对象不需要实现接口,但是目标对象一定要实现接口,否则不能用动态代理。

 

转载于:https://www.cnblogs.com/i-hard-working/p/10389612.html

你可能感兴趣的文章
vue实战(7):完整开发登录页面(一)
查看>>
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
读《构建之法-软件工程》第四章有感
查看>>
使用 Printf via SWO/SWV 输出调试信息
查看>>
.net 分布式架构之分布式锁实现(转)
查看>>
Problem E: Automatic Editing
查看>>
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>
sizeof与strlen的用法
查看>>
Linux 下常见目录及其功能
查看>>
开源框架中常用的php函数
查看>>
nginx 的提升多个小文件访问的性能模块
查看>>
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
1.开发准备
查看>>
centos su命令
查看>>