java动态代理详解
来源:互联网 发布:如何申请淘宝小号 编辑:程序博客网 时间:2024/05/20 11:27
java的动态代理详解
1.为什么要使用动态代理。
有时候我们在访问一个对象的时候,需要一些业务的处理,比如权限的控制,日志的记录,拦截器等等的一些面向切面的业务,这时候我们可以用拦截器实现。而且Struts的拦截器就是动态代理一个很典型的例子。
2.动态代理的使用
首先介绍几个类和方法
- Proxy类:位于java.lang.reflect.Proxy,这个类就是用于创建代理对象的核心类
- newProxyInstance方法:Proxy类的newProxyInstance方法返回代理对象 newProxyInstance(ClassLoader loader, Class< ?>[] interfaces, InvocationHandler h)
注意:为一个类创建动态代理,这个类必须实现接口,说白了,动态代理就是根据实现的接口找到类的方法做处理
//说下newProxyInstance方法的三个参数ClassLoader loader:定义代理类的类加载器interfaces:定义代理类所实现的接口InvocationHandler:实现了InvocationHandler接口的类。
下面就用具体的代码说明动态代理的使用
//这个是添加用户的接口package myexercise.proxy;public interface UserService { public void addUser(String userName); public String findUser(String sql);}
.
//添加用户的具体类,想要创建动态代理必须实现接口,这里实现了UserService接口package myexercise.proxy;public class UserServiceImpl implements UserService{ @Override public void addUser(String userName) { System.out.println("添加的用户姓名为--"+userName); } @Override public String findUser(String userName) { System.out.println("正在查询用户--"+userName); return "查询用户成功"; }}
.
//创建UserServiceImpl的代理类,实现执行添加用户方法的时候,输出该方法是否执行成功,类似日志记录的功能。package myexercise.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class DynamicProxy implements InvocationHandler { public Object targetObject; public Object myProxyInstance(Object targetObject){ this.targetObject=targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("开始添加用户..."); Object obj=null; try { obj=method.invoke(method.getName(), args); System.out.println("添加用户成功"); } catch (Exception e) { e.printStackTrace(); System.out.println("添加用户失败"); } return obj; }
.
//这个是客户端类package myexercise.proxy;public class Client { public static void main(String[] args) { DynamicProxy dp=new DynamicProxy(); UserService userService=(UserService) dp.myProxyInstance(new UserServiceImpl()); userService.addUser("张三"); }}
1 0
- Java动态代理详解
- java动态代理详解
- Java动态代理详解
- java动态代理详解
- 详解java动态代理
- java 动态代理详解
- Java动态代理详解
- java动态代理详解
- JAVA动态代理详解
- Java动态代理详解
- Java动态代理详解
- java动态代理详解
- Java动态代理详解
- java动态代理详解
- Java动态代理详解
- Java动态代理详解
- Java动态代理详解
- java动态代理详解
- 初次走入深搜DFS
- android 6.0 SystemUI源码分析(1)-SystemUI介绍
- C#处理Access中事务的方法
- 从mykernel来分析linux系统的启动过程
- 花了一晚上做计算机的布局 仅仅是布局呀~~~
- java动态代理详解
- Objective-C学习记录
- 深入浅出看流媒体前世今生,分分钟二逼变牛逼
- 一个简单的时间片轮转多道程序内核代码 的实现
- C#编程实现连接ACCESS数据库实例详解
- Cookie与Session的简单讨论
- spring配置整理
- 十种常见的排序算法总结(java版)
- Android原生应用Dialer--界面和数据库整体分析