码迷,mamicode.com
首页 > 编程语言 > 详细

java动态代理

时间:2014-09-29 14:29:40      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   使用   ar   java   数据   

动态代理:动态的对一个对象添加代理,以便实现代理模式.

 

java内部集成了动态代理的实现。

实现动态代理需要三个模块:1.动态代理适配器 2.接口 3.实现接口的真实类

 

1.动态代理适配器

package test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class proxy implements InvocationHandler{

    Object real;
    public proxy(Object real)
    {
        this.real = real;
    }
    @Override
    public Object invoke(Object arg0, Method arg1, Object[] arg2)
            throws Throwable {
        if(arg1.getName().equals("jump"))
        {
            System.out.println("拦截");
        }
        return null;
    }
}

这里的适配器实现了如果代理执行jump方法,便进行拦截。

 

2.接口

package test;

public interface dosomething {
    
    public void jump();
}

 


这里的接口是必须要用的,因为接口可以说明代理和类之间暴露的方法是相同的

 

3.实现接口的真实类

  

package test;

public class bean implements dosomething{

    @Override
    public void jump() {
        System.out.println("jump");
    }

}


这里的真实类bean实现了dosomething接口的方法jump

 

 

好了。 有了这三个必须的模块,就可以在主方法里面创建动态代理了

package test;

import java.lang.reflect.Proxy;

public class test {
    
    public static void main(String[] args) {
        dosomething t = (dosomething) Proxy.newProxyInstance(dosomething.class.getClassLoader(),new Class[]{dosomething.class},new proxy(new bean()));
        t.jump();
    }    
}

这里用的是Proxy.newProxyInstance的工厂方法

运行结果:

  拦截

 

何时使用动态代理呢?

   动态代理是对要调用某个类的方法进行拦截处理的操作,可以方便的实现类似数据库中的事务回滚等操作~

 

java动态代理

标签:style   blog   color   io   os   使用   ar   java   数据   

原文地址:http://www.cnblogs.com/ltwy/p/3999890.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!