java设计模式之动态代理的概述和实现
概述
1.代理:本来应该自己做的事情,请了别人来做,被请的人就是代理对象。
举例:春节回家买票让人代买
2.在Java中java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口
3.通过使用这个类和接口就可以生成动态代理对象。
4.JDK提供的代理只能针对接口做代理。我们有更强大的代理cglib(接口、非接口的类都可代理)
5.Proxy 通过 newProxyInstance(loader,interfaces,h)创建代理对象
5.InvocationHandler的invoke(proxy,method, args)方法会拦截方法的调用
package demo1;
public class UserServiceImp implements UserService {
@Override
public void registerUser() {
// TODO Auto-generated method stub
System.out.println("注册用户");
}
@Override
public void deleteUser() {
// TODO Auto-generated method stub
System.out.println("删除用户");
}
}
package demo1;
public interface UserService {
public void registerUser();
public void deleteUser();
}
package demo1; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; public class Test { public static void main(String[] args) {
//创建对象
UserServiceImp usi = new UserServiceImp();
//usi.registerUser();
//usi.deleteUser(); //创建代理对象
UserService proxy = (UserService) Proxy.newProxyInstance(usi.getClass().getClassLoader(),
usi.getClass().getInterfaces(),
new InvocationHandler() { @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
//此处拦截了usi的两个方法,下面可通过invoke来调用
System.out.println("权限校验======");
Object returnObj = method.invoke(usi,args);
System.out.println("日志记录======="); return returnObj;
}
}); proxy.registerUser();
proxy.deleteUser(); } }
java设计模式之动态代理的概述和实现的更多相关文章
- Java设计模式—Proxy动态代理模式
代理:设计模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 图 1. 代 ...
- Java设计模式之动态代理
关于Proxy: 1,他是所有动态代理的父类: 2,他可以用作创建动态代理类和动态代理对象: 3,JDK中自带的动态代理. 1,首先创建一个接口,方法申明如下: package com.proxy; ...
- 细说java系统之动态代理
代理模式 在深入学习动态代理之前,需要先掌握代理模式.只有深刻理解了代理模式的应用,才能充分理解Java动态代理带来的便利. 在生活中存在许多使用"代理模式"的场景,比如:村里的张 ...
- 十分钟理解Java中的动态代理
十分钟理解 Java 中的动态代理 一.概述 1. 什么是代理 我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品.关于微商代理,首先我们从他们那里买东西时通常不知道 ...
- java 笔记(3) —— 动态代理,静态代理,cglib代理
0.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口. 代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存 ...
- 杨晓峰-Java核心技术-6 动态代理 反射 MD
目录 第6讲 | 动态代理是基于什么原理? 典型回答 考点分析 知识扩展 反射机制及其演进 动态代理 精选留言 Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAnd ...
- 一文读懂Java中的动态代理
从代理模式说起 回顾前文: 设计模式系列之代理模式(Proxy Pattern) 要读懂动态代理,应从代理模式说起.而实现代理模式,常见有下面两种实现: (1) 代理类关联目标对象,实现目标对象实现的 ...
- java反射和动态代理实现与原理详细分析
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模式是常用的java设计模式, ...
- 使用Java中的动态代理实现数据库连接池
2002 年 12 月 05 日 作者通过使用JAVA中的动态代理实现数据库连接池,使使用者可以以普通的jdbc连接的使用习惯来使用连接池. 数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的 ...
随机推荐
- js:return [ expression ],return false,return true,return的区别
1.return [ expression ] return返回值实际上是对window.event.returnvalue进行设置. 2.return false,阻止默认的行为, ① 当给a标签绑 ...
- oracle按照指定列分组合计group by rollup()
group by rollup() 按分组合计 select grouping(status),status,owner,object_type,count(*) from dba_objects w ...
- 第三节:Windows下检出项目和提交项目
1.将项目下载到本地: 2.在客户端中,右键点击test,选择show in explorer: 然后修改日志文件并保存: 3.在客户端中填写备注并提交: 4.提交到github中:
- 【前端技术】web 开发常见问题--GET POST 区别
web 开发常见问题--GET POST 区别 首先,get和post是什么? --两种 HTTP 请求方法:GET 和 POST HTTP Request Methods GET.POST 专业 ...
- WebSocket 学习教程(一):理论
一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通 ...
- c#4.0 Task.Factory.StartNew 用法
var t1 = Task.Factory.StartNew<string>(() => { return “1111111”; }); //t1.Wait(); t1.Contin ...
- React篇-滚动条下移的触发在react的生命周期分析
项目的要求是一个chartUI方式的聊天显示页面,根据聊天信息的不断增加,页面需要滑动一定距离,这样能看到最新的聊天结果,这样就需要在聊天结果返回之后触发滚动条向下滚动到一定的距离,代码如下: com ...
- element-dialog封装成子组件
1.父组件 <template> <card-layout :title="L('Users')" :actions="actions" @c ...
- cocos2d 利用cocosStudio制作合图(plist与png)
- Linux基础(五) Shell函数
Shell 函数 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action ...