本帖最后由 刘雷冲 于 2012-3-10 18:58 编辑
代理模式是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,
并由代理对象控制对原对象的引用
代理分类:
1、静态代理
1>需要建立大量的代理类
2>重复的代码会出现在各个角落(违背的原则:重复代码最好不要出现多次)
2、动态代理
JDK动态代理只能实现了接口的类进行代理,采用了JDK动态代理必须实现
InvocationHander接口,采用Proxy类创建相应的代理类,参见LogHander.java
采用JDK动态代理可以对目录类(UserManagerImp)方法进行增强- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- public class LogHander implements InvocationHandler {
- private Object object;
-
- public Object newProxyInstance(Object object) {
- this.object = object;
-
- return Proxy.newProxyInstance(object.getClass().getClassLoader(),
- object.getClass().getInterfaces(), this );
- }
-
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
-
- System.out.println("start------------>>>>>>");
- Object obj = null;
- try {
- obj = method.invoke(object, args);
- System.out.println("chenggong");
- } catch(Exception e) {
- e.printStackTrace();
- }
- /*try {
-
- System.out.println("name=----" + method.getName());
- for(int i=0; i<args.length; i++) {
- System.out.println("参数 " + args[i]);
- System.out.println("大幅度");
- }
- } catch(Exception e) {
- e.printStackTrace();
- System.out.println("error---------");
- }*/
-
-
- return obj;
- }
-
-
-
- }
复制代码
Proxy.zip
(1.97 KB, 下载次数: 72)
|