动态代理 and Listener监听器
代理模式
概念:
- 真实对象:被代理的对象
- 代理对象:
- 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的
实现方式:
- 静态代理:有一个类文件描述代理模式
- 动态代理:在内存中形成代理类
实现步骤:
- 代理对象和真实对象实现相同的接口
- 代理对象 = Proxy.newProxyInstance();
- 使用代理对象调用方法。
- 增强方法
- 实例:
package cn.itcast.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class ProxyTest {public static void main(String[] args) {//1.创建真实对象Lenovo lenovo = new Lenovo();//2.动态代理增强lenovo对象/*三个参数:1. 类加载器:真实对象.getClass().getClassLoader()2. 接口数组:真实对象.getClass().getInterfaces()3. 处理器:new InvocationHandler()*/SaleComputer proxy_lenovo = (SaleComputer)Proxy.newProxyInstance(lenovo.getClass().getClassLoader(),lenovo.getClass().getInterfaces(),new InvocationHandler() {/*代理逻辑编写的方法:代理对象调用的所有方法都会触发该方法执行参数:1. proxy:代理对象2. method:代理对象调用的方法,被封装为的对象3. args:代理对象调用的方法时,传递的实际参数*/@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {/*System.out.println("该方法执行了....");System.out.println(method.getName());System.out.println(args[0]);*///判断是否是sale方法if(method.getName().equals("sale")){//1.增强参数double money = (double) args[0];money = money * 0.85;System.out.println("专车接你....");//使用真实对象调用该方法String obj = (String) method.invoke(lenovo, money);System.out.println("免费送货...");//2.增强返回值return obj+"_鼠标垫";}else{Object obj = method.invoke(lenovo, args);return obj;}}});//3.调用方法/* String computer = proxy_lenovo.sale(8000);System.out.println(computer);*/proxy_lenovo.show();}
}
Listener:监听器
- 概念:web的三大组件之一。
- 事件监听机制
- 事件 :一件事情
- 事件源 :事件发生的地方
- 监听器 :一个对象
- 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码
- 事件监听机制
ServletContextListener:监听ServletContext对象的创建和销毁
- 方法:
- void contextDestroyed(ServletContextEvent sce) :ServletContext对象被销毁之前会调用该方法
- void contextInitialized(ServletContextEvent sce) :ServletContext对象创建后会调用该方法
- 方法:
步骤:
- 定义一个类,实现ServletContextListener接口
- 复写方法
- 配置
- web.xml
<listener><listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
</listener>
- 注解:
@WebListener
动态代理 and Listener监听器相关推荐
- 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )
文章目录 前言 一.创建 事件监听器 对应的 动态代理 二.动态代理 数据准备 三.动态代理 调用处理程序 四.动态代理 实例对象创建 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...
- Listener 监听器
Listener 监听器 前言:之前写了一篇关于Filter的文章:http://tianweili.github.io/blog/2015/01/26/java-filter/,现在再来一篇List ...
- 设计模式之_动态代理_03
我们假设被代理的对象实现了一个接口,不管它实现了什么样的接口,但是它实现了一个接口,用集成也可以实现代理,但是继承不好,所以我们被代理的类要实现一个接口,这个在Spring也是这么要求的,不过Spri ...
- hook控制浏览器的方法_Java-Hook技术-入门实践+反射、动态代理、热修复再看看
延续之前的MonkeyLei:Android-模块化.组件化.插件化.热修复-插件化-起个头,我们复习下里面的关于反射和动态代理点的知识.然后尝试简单了解下Hook... 看之前文章,记得多复习下反射 ...
- 十八、泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器基础加强
l 泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器 泛型 1 回顾泛型类 泛型类:具有一个或多个泛型变量的类被称之为泛型类. public class A<T> { ...
- 动态代理—IOC框架
第一个部分- XUtils框架2.0实现:事件注入.资源注入.保存数据注入 1.注入事件 XUtils2.0框架实现 import android.app.Activity; import andro ...
- Java中的Listener监听器与Ajax技术和Axios异步框架以及JSON传递接收数据
Listener监听器与Ajax Listener 概念 Listener 表示监听器,是 JavaWeb 三大组件(Servlet.Filter.Listener)之一. 监听器可以监听就是在 ap ...
- WEB——BaseDao、注解、Servlet3.0、动态代理、类的加载器
**编写BaseDao** 1.dao持久层怎么来写的? 2.编写通用的BaseDao,其他的Dao的持久层继承BaseDao,提供增删改查的方法了. 3. ...
- Java-AOP(Hook)实现机制(JDK/cglib动态代理/ASM/Javassist/AspectJ)
原文: http://www.iteye.com/topic/1116696 1 AOP各种的实现 AOP就是面向切面编程,我们可以从几个层面来实现AOP. AOP实现时有三种方式:生成子类字节码.生 ...
最新文章
- Cisco ***学习笔记--第二天
- hive整合sentry,impala,hue之后权限管理操作
- WebHook 与jenkins
- leetcode208. 实现 Trie (前缀树)
- 【100题】第三十三 高级字符匹配(和谐系统原理)
- mysql清理死链接_对MySQL的死连接Sleep的进程的来源研究
- SFML图形库学习:环境部署
- 专访数据挖掘领头人韩家炜教授:不要迷信权威,做学问要秉承「三个真实」...
- linux单盘raid0,MegaCli修复单盘RAID0
- oracle 月增长率,oracle同比增长怎么算,同比增长率怎么算?
- command/cmd命令大全
- 雷军第二场直播带货圆满成功,雷军代言小米试用期一个月
- 程序员菜谱3中粥做法
- 【STM32标准库】【基础知识】时钟系统
- PAT乙级全题解存档
- 2021乌兰浩特四中高考成绩查询,2021内蒙古地区高考查分详细
- Unity之软件在win7旗舰版上无法全屏“铺满”显示
- Git -- submoudule子模块使用
- 【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游 LCT 泰勒展开
- Android计步器悦步——计步功能
热门文章
- 服务器重装系统要注意什么_企业租用美国服务器,应该注意什么?
- linux中特殊符号分割,Shell_Linux Shell 中实现字符串切割的几种方法
- java中扫描类_java类扫描
- asp 退出登录修改cookie能进入后台_某logCMS的代码审计:越权到后台getshell
- object转成实体对象_面向对象的TypeScript-序列化与反序列化(1)
- 【.NET类库】通过SharpSocket进行TCP/UDP通信数据传输
- hdu 1133 Buy the Ticket(递推+精度精算)
- 强类型数据集DataSet入门1
- 【转】四阶魔方还原1
- Mac安装oh-my-zsh更改终端背景