`
mmk12333
  • 浏览: 35116 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

javaSE之动态代理

 
阅读更多

动态代理技术:

    使程序更加灵活,可以在代理java类的时候加入一些功能。

    很类似过滤器,区别:

                         过滤器是自己编写西横须实现的功能

                         动态代理是JVM内部机制

    实现步骤:

        1.真是业务对象(被代理对象)

        2.代理对象

        3.需要为被代理对象制定代理对象(建立关系)

           隐含.代理对象需要提供和被代理对象一样的方法

 

    依赖于Proxy类

         java变成中代理对象是有Proxy动态生成的

         Proxy类中newInstance方法是生成某个代理对象的

             需要如下三个参数

                    1.类加载器(被代理对象的类加载器)

                    2.制定被代理对象的接口集合

                    3.InvoctionHandler代理的行为(代理对象的扩展)invoke       :返回值必须是接口

 

    必须理解

         1.一旦为java类指定代理对象,那么不管怎么操作java类,都必须先执行代理对象

         2.由于invoke方法呗调用需要三个参数(代理对象,方法,方法参数 ),因此不管代理对象哪个方法调用

            处理器的invoke方法,都必须把自己所在的对象(调用invoke方法的方法),方法的参数传递进来

 

   注:java编程时,动态代理必须基于接口

 

    代理对象(类)示例:

           public class RequestProxy {
    // 接收真实业务对象 返回代理对象
    public static HttpServletRequest getProxy(final HttpServletRequest request) {
        HttpServletRequest requestProxy = (HttpServletRequest) Proxy
                .newProxyInstance(request.getClass().getClassLoader(), request
                        .getClass().getInterfaces(), new InvocationHandler() {

                    // 当执行 request.getParameter时 执行invoke
                    @Override
                    public Object invoke(Object proxy, Method method,
                            Object[] args) throws Throwable {
                        // 加强getParameter
                        if (method.getName().equals("getParameter")) {
                            // 加强
                            String value = (String) method
                                    .invoke(request, args);
                            HttpServletRequest httpServletRequest = (HttpServletRequest) request;
                            if (httpServletRequest.getMethod()
                                    .equalsIgnoreCase("post")) {
                                return value;
                            }

                            // 处理 get
                            if (value == null) {
                                return null;
                            }
                            // 手动get转码
                            value = new String(value.getBytes("ISO-8859-1"),
                                    "utf-8");
                            return value;
                        }

                        // 其它方法不加强
                        return method.invoke(request, args);

                    }
                });

        return requestProxy;
     }
 }

 

1
0
分享到:
评论

相关推荐

    JavaSE李学重讲义

    JavaSE还包含反射和动态代理等高级特性。反射允许我们在运行时检查类的信息,甚至修改其行为。动态代理则可以在运行时创建接口的实现类,常用于AOP(面向切面编程)。 最后,JavaSE的API非常丰富,如 Swing 和 AWT ...

    javase笔记.7z

    动态代理则允许在运行时创建代理对象,实现对原对象的方法调用拦截。 九、JDBC数据库访问 Java Database Connectivity (JDBC) 是Java连接数据库的标准API,可以用来执行SQL语句、管理事务等。 十、泛型 Java 5引入...

    JavaSE065静态代理模式深度剖析.docx

    每个Java类都有一个与之对应的`Class`对象,它在类被加载到JVM时自动创建,但并不具备公共构造器,因此我们无法直接实例化`Class`对象。我们可以使用多种方式获取`Class`对象: 1. 使用`getClass()`方法:每个Java...

    JavaSE常见面试题-高级反射-JVM篇.pdf

    本文档涵盖了JavaSE中高级反射和JVM相关的知识点,包括Java中的反射机制、动态代理、设计模式、回收机制、JDK7和JDK8的区别、Jvm虚拟机原理等。 一、 Java中的反射机制 Java中的反射机制是指可以在运行时inspect和...

    Javase 技术代码测试

    4. **设计模式**:设计模式是面向对象编程中解决常见问题的经验总结,包括单例模式、工厂模式、建造者模式、观察者模式、装饰器模式、代理模式等。理解并掌握这些模式可以帮助开发者写出可扩展、可维护的代码。 5. ...

    JavaSE将以

    反射常用于插件系统、序列化、动态代理等领域。 最后,JavaSE还包括了网络编程、数据库连接(JDBC)、国际化(I18N)、XML处理等众多内容。通过学习JavaSE,开发者可以掌握Java编程的基本技能,为进阶到JavaEE...

    JavaSE25套习题(含答案)

    8. **反射**:反射允许程序在运行时检查类的信息,创建和调用对象,是实现动态代理、元数据处理等功能的基础。 9. **枚举与注解**:枚举提供了一种安全的方式来表示有限的常量集合,注解则是元数据的一种形式,可以...

    JAVASE中文版文档说明

    它常用于插件系统、序列化和动态代理等场景。 11. **泛型**: 泛型引入于Java 5,用于增强类型安全,减少类型转换,并允许编译器检查类型匹配。它可以应用于类、接口和方法。 12. **枚举和注解**: 枚举(enum)是一...

    JavaSE notes,笔记

    此外,JavaSE笔记可能还会涉及反射、动态代理、注解等高级特性。反射允许程序在运行时检查和修改自身的行为,动态代理则能实现动态地创建具有特定接口的对象,注解可以提供元数据,让编译器或运行时系统自动处理代码...

    【狂神说】JavaSE系列.zip

    这在框架开发、元编程和动态代理等方面有广泛应用。 8. **网络编程**:JavaSE提供了Socket和ServerSocket类用于网络通信,可以构建简单的TCP/IP服务。 9. **泛型**:泛型是Java 5引入的新特性,用来在编译时检查...

    JAVASE知识脑图

    8. **反射机制**:通过反射可以动态地获取类的信息,创建对象,调用方法,访问私有属性,以及实现动态代理。 9. **集合高级**:泛型、迭代器、Lambda表达式,以及Stream API的使用,这些是Java 5及后续版本引入的新...

    基于JavaSE的宿舍管理系统

    9. **反射和动态代理**:反射API允许程序在运行时检查和修改自身的行为,而动态代理则可以在运行时创建具有特定接口的对象,这在实现AOP(面向切面编程)或动态服务注册等场景中很有用。 10. **设计模式**:在系统...

    javaSE代码及其注解

    这在插件系统、序列化和动态代理等场景中很有用。 8. **泛型**:泛型引入了类型参数,增强了代码的类型安全性。注解会讲解如何使用泛型类、泛型方法以及通配符。 9. **枚举与注解**:枚举类型提供了一种安全的方式...

    JavaSE(下).pdf1111

    本资源摘要信息主要涵盖 JavaSE 的多线程编程、集合框架、枚举类与注解、泛型、IO 流、网络编程和反射与动态代理等方面的知识点。 1. 多线程(267-306页) * 程序、进程、线程的基本概念 * 线程的创建和使用 * ...

    javase思维导图

    这在进行元编程、插件系统、动态代理等场景中非常有用。 9. **Java API**:Java的标准库(Java API)包含了大量的类和接口,覆盖了从基本类型操作到高级功能如XML解析、数据库连接等。熟悉并熟练使用这些API可以极...

    第(2-11)章 JavaSE基础知识(入门推荐)免分

    7. **面向对象编程的高级概念**:这部分可能包括枚举、内部类、匿名类、动态代理、反射等进阶主题,这些内容对于深入理解Java和构建复杂系统至关重要。 8. **软件开发周期简介**:虽然不是纯技术内容,但了解软件...

    javase demo 工作经验

    14. **设计模式**:熟悉并能够应用常见的设计模式,如单例模式、工厂模式、装饰器模式、代理模式等,提升代码的可维护性和复用性。 这个"javase demo工作经验"压缩包中的Demos-JavaSE很可能是包含上述知识点的实例...

    javase的学习资料

    9. **反射API**:了解反射的概念,学习Class类、Constructor类、Method类和Field类的使用,以及动态代理。 10. **枚举与注解**:掌握枚举类型和注解的应用,理解它们在代码中扮演的角色。 11. **泛型**:理解泛型...

    JavaSE笔记11111

    动态代理是基于反射机制实现的,可以生成一个代理对象,该代理对象在调用真实对象的方法时可以插入额外的操作,例如日志记录、性能监控等。 在Java编程中,变量是内存中的一个存储单元,用来存放数据。Java有多种...

Global site tag (gtag.js) - Google Analytics