动态代理技术:
使程序更加灵活,可以在代理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;
}
}
分享到:
相关推荐
JavaSE还包含反射和动态代理等高级特性。反射允许我们在运行时检查类的信息,甚至修改其行为。动态代理则可以在运行时创建接口的实现类,常用于AOP(面向切面编程)。 最后,JavaSE的API非常丰富,如 Swing 和 AWT ...
动态代理则允许在运行时创建代理对象,实现对原对象的方法调用拦截。 九、JDBC数据库访问 Java Database Connectivity (JDBC) 是Java连接数据库的标准API,可以用来执行SQL语句、管理事务等。 十、泛型 Java 5引入...
每个Java类都有一个与之对应的`Class`对象,它在类被加载到JVM时自动创建,但并不具备公共构造器,因此我们无法直接实例化`Class`对象。我们可以使用多种方式获取`Class`对象: 1. 使用`getClass()`方法:每个Java...
本文档涵盖了JavaSE中高级反射和JVM相关的知识点,包括Java中的反射机制、动态代理、设计模式、回收机制、JDK7和JDK8的区别、Jvm虚拟机原理等。 一、 Java中的反射机制 Java中的反射机制是指可以在运行时inspect和...
4. **设计模式**:设计模式是面向对象编程中解决常见问题的经验总结,包括单例模式、工厂模式、建造者模式、观察者模式、装饰器模式、代理模式等。理解并掌握这些模式可以帮助开发者写出可扩展、可维护的代码。 5. ...
反射常用于插件系统、序列化、动态代理等领域。 最后,JavaSE还包括了网络编程、数据库连接(JDBC)、国际化(I18N)、XML处理等众多内容。通过学习JavaSE,开发者可以掌握Java编程的基本技能,为进阶到JavaEE...
8. **反射**:反射允许程序在运行时检查类的信息,创建和调用对象,是实现动态代理、元数据处理等功能的基础。 9. **枚举与注解**:枚举提供了一种安全的方式来表示有限的常量集合,注解则是元数据的一种形式,可以...
它常用于插件系统、序列化和动态代理等场景。 11. **泛型**: 泛型引入于Java 5,用于增强类型安全,减少类型转换,并允许编译器检查类型匹配。它可以应用于类、接口和方法。 12. **枚举和注解**: 枚举(enum)是一...
此外,JavaSE笔记可能还会涉及反射、动态代理、注解等高级特性。反射允许程序在运行时检查和修改自身的行为,动态代理则能实现动态地创建具有特定接口的对象,注解可以提供元数据,让编译器或运行时系统自动处理代码...
这在框架开发、元编程和动态代理等方面有广泛应用。 8. **网络编程**:JavaSE提供了Socket和ServerSocket类用于网络通信,可以构建简单的TCP/IP服务。 9. **泛型**:泛型是Java 5引入的新特性,用来在编译时检查...
8. **反射机制**:通过反射可以动态地获取类的信息,创建对象,调用方法,访问私有属性,以及实现动态代理。 9. **集合高级**:泛型、迭代器、Lambda表达式,以及Stream API的使用,这些是Java 5及后续版本引入的新...
9. **反射和动态代理**:反射API允许程序在运行时检查和修改自身的行为,而动态代理则可以在运行时创建具有特定接口的对象,这在实现AOP(面向切面编程)或动态服务注册等场景中很有用。 10. **设计模式**:在系统...
这在插件系统、序列化和动态代理等场景中很有用。 8. **泛型**:泛型引入了类型参数,增强了代码的类型安全性。注解会讲解如何使用泛型类、泛型方法以及通配符。 9. **枚举与注解**:枚举类型提供了一种安全的方式...
本资源摘要信息主要涵盖 JavaSE 的多线程编程、集合框架、枚举类与注解、泛型、IO 流、网络编程和反射与动态代理等方面的知识点。 1. 多线程(267-306页) * 程序、进程、线程的基本概念 * 线程的创建和使用 * ...
这在进行元编程、插件系统、动态代理等场景中非常有用。 9. **Java API**:Java的标准库(Java API)包含了大量的类和接口,覆盖了从基本类型操作到高级功能如XML解析、数据库连接等。熟悉并熟练使用这些API可以极...
7. **面向对象编程的高级概念**:这部分可能包括枚举、内部类、匿名类、动态代理、反射等进阶主题,这些内容对于深入理解Java和构建复杂系统至关重要。 8. **软件开发周期简介**:虽然不是纯技术内容,但了解软件...
14. **设计模式**:熟悉并能够应用常见的设计模式,如单例模式、工厂模式、装饰器模式、代理模式等,提升代码的可维护性和复用性。 这个"javase demo工作经验"压缩包中的Demos-JavaSE很可能是包含上述知识点的实例...
9. **反射API**:了解反射的概念,学习Class类、Constructor类、Method类和Field类的使用,以及动态代理。 10. **枚举与注解**:掌握枚举类型和注解的应用,理解它们在代码中扮演的角色。 11. **泛型**:理解泛型...
动态代理是基于反射机制实现的,可以生成一个代理对象,该代理对象在调用真实对象的方法时可以插入额外的操作,例如日志记录、性能监控等。 在Java编程中,变量是内存中的一个存储单元,用来存放数据。Java有多种...