Java 动态代理
2017-07-13 10:37
190 查看
代理模式:创建代理对象,使用代理对象控制目标对象的访问。
Subject : 抽象主题角色,定义方法,可以是抽象类也可以是接口。
RealSubject : 具体主题角色,它是业务逻辑的具体实现者。
ProxySybject : 代理主题角色,它代理具体主题角色,并将其中的方法暴露给客户,由其调用。
这样子导致了代理类所实现的接口和静态方法都被固定,每次增加具体主题角色,就要增加代理主题角色类,造成系统中的类的数量急剧增加,这称为静态代理。
动态代理:
在系统运行的时候动态地创建代理类,并且一个代理类可以代理多个具体主题角色。动态代理类需要实现一个接口:InvocationHandler.调用具体主题中的方法时,会转由这个接口中的invoke方法进行调用。
proxy : 在其上调用方法的代理实例。
method : 对应于在代理实例上调用的接口的Method实例。
args : 包含传入代理实例上方法调用的参数值的对象数组。
return : 如果接口方法的声明类型是基本类型,则方法返回的值一定是基本包装类的实例。
Proxy类:提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
loader : 定义代理类的类加载器
interfaces : 代理类要实现的接口列表h
输出结果:
Subject : 抽象主题角色,定义方法,可以是抽象类也可以是接口。
RealSubject : 具体主题角色,它是业务逻辑的具体实现者。
ProxySybject : 代理主题角色,它代理具体主题角色,并将其中的方法暴露给客户,由其调用。
这样子导致了代理类所实现的接口和静态方法都被固定,每次增加具体主题角色,就要增加代理主题角色类,造成系统中的类的数量急剧增加,这称为静态代理。
动态代理:
在系统运行的时候动态地创建代理类,并且一个代理类可以代理多个具体主题角色。动态代理类需要实现一个接口:InvocationHandler.调用具体主题中的方法时,会转由这个接口中的invoke方法进行调用。
invoke(Object proxy,Method method,Object[] args)
proxy : 在其上调用方法的代理实例。
method : 对应于在代理实例上调用的接口的Method实例。
args : 包含传入代理实例上方法调用的参数值的对象数组。
return : 如果接口方法的声明类型是基本类型,则方法返回的值一定是基本包装类的实例。
Proxy类:提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h);
loader : 定义代理类的类加载器
interfaces : 代理类要实现的接口列表h
输出结果:
相关文章推荐
- 使用JAVA中的动态代理实现数据库连接池 Z
- 使用Java动态代理实现AOP
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- 用Java动态代理实现AOP
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- Java动态代理实现AOP
- AOP系列之三:用Java动态代理实现AOP [zz]
- 迈出AOP第一步--使用Java 动态代理实现AOP[zz]
- 使用JAVA中的动态代理实现数据库连接池
- 使用JAVA中的动态代理实现数据库连接池
- Java动态代理实现
- 用Java动态代理实现AOP
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP
- 用Java动态代理实现AOP
- Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP(转)
- 使用java 动态代理去掉代码中的bad smell。
- 使用JAVA中的动态代理实现数据库连接池
- AOP初学者第一步:用Java动态代理实现AOP
- 动态代理(Dynamic Proxy)Java Servlet