代理模式

  • 概念:

    1. 真实对象:被代理的对象
    2. 代理对象:
    3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的
  • 实现方式:

    1. 静态代理:有一个类文件描述代理模式
    2. 动态代理:在内存中形成代理类
  • 实现步骤:

    1. 代理对象和真实对象实现相同的接口
    2. 代理对象 = Proxy.newProxyInstance();
    3. 使用代理对象调用方法。
    4. 增强方法
  • 实例:
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对象创建后会调用该方法
  • 步骤:

    1. 定义一个类,实现ServletContextListener接口
    2. 复写方法
    3. 配置
  1. web.xml
<listener><listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
</listener>
  1. 注解:
    @WebListener

动态代理 and Listener监听器相关推荐

  1. 【IOC 控制反转】Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 创建 事件监听器 对应的 动态代理 | 动态代理的数据准备 | 创建调用处理程序 | 创建动态代理实例对象 )

    文章目录 前言 一.创建 事件监听器 对应的 动态代理 二.动态代理 数据准备 三.动态代理 调用处理程序 四.动态代理 实例对象创建 前言 Android 依赖注入的核心就是通过反射获取 类 / 方 ...

  2. Listener 监听器

    Listener 监听器 前言:之前写了一篇关于Filter的文章:http://tianweili.github.io/blog/2015/01/26/java-filter/,现在再来一篇List ...

  3. 设计模式之_动态代理_03

    我们假设被代理的对象实现了一个接口,不管它实现了什么样的接口,但是它实现了一个接口,用集成也可以实现代理,但是继承不好,所以我们被代理的类要实现一个接口,这个在Spring也是这么要求的,不过Spri ...

  4. hook控制浏览器的方法_Java-Hook技术-入门实践+反射、动态代理、热修复再看看

    延续之前的MonkeyLei:Android-模块化.组件化.插件化.热修复-插件化-起个头,我们复习下里面的关于反射和动态代理点的知识.然后尝试简单了解下Hook... 看之前文章,记得多复习下反射 ...

  5. 十八、泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器基础加强

    l 泛型 l 注解 l Servlet3.0 l 动态代理 l 类加载器 泛型 1 回顾泛型类 泛型类:具有一个或多个泛型变量的类被称之为泛型类. public class A<T> { ...

  6. 动态代理—IOC框架

    第一个部分- XUtils框架2.0实现:事件注入.资源注入.保存数据注入 1.注入事件 XUtils2.0框架实现 import android.app.Activity; import andro ...

  7. Java中的Listener监听器与Ajax技术和Axios异步框架以及JSON传递接收数据

    Listener监听器与Ajax Listener 概念 Listener 表示监听器,是 JavaWeb 三大组件(Servlet.Filter.Listener)之一. 监听器可以监听就是在 ap ...

  8. WEB——BaseDao、注解、Servlet3.0、动态代理、类的加载器

    **编写BaseDao**          1.dao持久层怎么来写的?     2.编写通用的BaseDao,其他的Dao的持久层继承BaseDao,提供增删改查的方法了.          3. ...

  9. Java-AOP(Hook)实现机制(JDK/cglib动态代理/ASM/Javassist/AspectJ)

    原文: http://www.iteye.com/topic/1116696 1 AOP各种的实现 AOP就是面向切面编程,我们可以从几个层面来实现AOP. AOP实现时有三种方式:生成子类字节码.生 ...

最新文章

  1. Cisco ***学习笔记--第二天
  2. hive整合sentry,impala,hue之后权限管理操作
  3. WebHook 与jenkins
  4. leetcode208. 实现 Trie (前缀树)
  5. 【100题】第三十三 高级字符匹配(和谐系统原理)
  6. mysql清理死链接_对MySQL的死连接Sleep的进程的来源研究
  7. SFML图形库学习:环境部署
  8. 专访数据挖掘领头人韩家炜教授:不要迷信权威,做学问要秉承「三个真实」...
  9. linux单盘raid0,MegaCli修复单盘RAID0
  10. oracle 月增长率,oracle同比增长怎么算,同比增长率怎么算?
  11. command/cmd命令大全
  12. 雷军第二场直播带货圆满成功,雷军代言小米试用期一个月
  13. 程序员菜谱3中粥做法
  14. 【STM32标准库】【基础知识】时钟系统
  15. PAT乙级全题解存档
  16. 2021乌兰浩特四中高考成绩查询,2021内蒙古地区高考查分详细
  17. Unity之软件在win7旗舰版上无法全屏“铺满”显示
  18. Git -- submoudule子模块使用
  19. 【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游 LCT 泰勒展开
  20. Android计步器悦步——计步功能

热门文章

  1. 服务器重装系统要注意什么_企业租用美国服务器,应该注意什么?
  2. linux中特殊符号分割,Shell_Linux Shell 中实现字符串切割的几种方法
  3. java中扫描类_java类扫描
  4. asp 退出登录修改cookie能进入后台_某logCMS的代码审计:越权到后台getshell
  5. object转成实体对象_面向对象的TypeScript-序列化与反序列化(1)
  6. 【.NET类库】通过SharpSocket进行TCP/UDP通信数据传输
  7. hdu 1133 Buy the Ticket(递推+精度精算)
  8. 强类型数据集DataSet入门1
  9. 【转】四阶魔方还原1
  10. Mac安装oh-my-zsh更改终端背景