java动态代理总结
2012-12-02 11:48
302 查看
具体实现步骤:
第一步,创建接口和实现类,也可以称为目标类!
接口------
public interface targetImp {
public void dosome();
}
目标类-------------
public class target implements targetImp{
@Override
public void dosome() {
// TODO Auto-generated method stub
System.out.println("----doSomething");
}
}
第二步,创建InvocationHandler的实现类,和拦截器类
------------------------拦截器类,作用是在执行目标方法之前或者之后根据需求执行相应操作
public class interceptor {
public void befor(){
System.out.println("---------befor");
}
public void after(){
System.out.println("---------after");
}
}
----------------------------创建InvocationHandler实现类
public class MyHandler implements InvocationHandler {
private Object o;//被代理的对象
private interceptor i;
public MyHandler(){
}
public MyHandler(Object o){//在实例化的时候将目标类引用进来 并且实例化拦截器
this.o=o;
i=new interceptor();
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)//Object proxy:指被代理的对象。 Method method:要调用的方法
throws Throwable { //Object[] args:方法调用时所需要的参数
Object res=null;
i.befor();
res=method.invoke(o, args);//实现目标类的方法
i.after();
return res;
}
}
第三步,创建代理类
public class MyProxy {
public Object getProxy(Object o){
MyHandler h=new MyHandler(o);
return Proxy.newProxyInstance(o.getClass().getClassLoader(),o.getClass().getInterfaces(),h);
}
}
第四步,测试
public class test {
public static void main(String[] args) {
targetImp t=new target();
MyProxy my=new MyProxy();
targetImp res=(targetImp)my.getProxy(t);
res.dosome();
}
}
第五步 测试结果
---------befor
----doSomething
---------after
总结:动态代理的底层是java的反射机制,在框架的使用上面比较多,目标类和接口都是通过后期的配置文件去指定的,所以我们只要指定了类名和接口,通过动态代理的方式去执行方法
第一步,创建接口和实现类,也可以称为目标类!
接口------
public interface targetImp {
public void dosome();
}
目标类-------------
public class target implements targetImp{
@Override
public void dosome() {
// TODO Auto-generated method stub
System.out.println("----doSomething");
}
}
第二步,创建InvocationHandler的实现类,和拦截器类
------------------------拦截器类,作用是在执行目标方法之前或者之后根据需求执行相应操作
public class interceptor {
public void befor(){
System.out.println("---------befor");
}
public void after(){
System.out.println("---------after");
}
}
----------------------------创建InvocationHandler实现类
public class MyHandler implements InvocationHandler {
private Object o;//被代理的对象
private interceptor i;
public MyHandler(){
}
public MyHandler(Object o){//在实例化的时候将目标类引用进来 并且实例化拦截器
this.o=o;
i=new interceptor();
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)//Object proxy:指被代理的对象。 Method method:要调用的方法
throws Throwable { //Object[] args:方法调用时所需要的参数
Object res=null;
i.befor();
res=method.invoke(o, args);//实现目标类的方法
i.after();
return res;
}
}
第三步,创建代理类
public class MyProxy {
public Object getProxy(Object o){
MyHandler h=new MyHandler(o);
return Proxy.newProxyInstance(o.getClass().getClassLoader(),o.getClass().getInterfaces(),h);
}
}
第四步,测试
public class test {
public static void main(String[] args) {
targetImp t=new target();
MyProxy my=new MyProxy();
targetImp res=(targetImp)my.getProxy(t);
res.dosome();
}
}
第五步 测试结果
---------befor
----doSomething
---------after
总结:动态代理的底层是java的反射机制,在框架的使用上面比较多,目标类和接口都是通过后期的配置文件去指定的,所以我们只要指定了类名和接口,通过动态代理的方式去执行方法
相关文章推荐
- Java动态代理总结
- Java静态代理和动态代理总结
- java 动态代理的方法总结
- Java代理(jdk静态代理、动态代理和cglib动态代理)实例及总结
- JAVA动态代理简单总结
- JAVA中的静态代理、动态代理以及CGLIB动态代理总结
- JavaWeb开发知识总结(annotation,Servlet3.0,文件上传,动态代理)
- java 动态代理总结
- JavaSE第六十八讲:Java动态代理总结
- 2017.5.1 java动态代理总结
- Java动态代理总结
- 黑马程序员:Java基础总结----静态代理模式&动态代理
- Java基础加强总结之动态代理(Proxy)
- 2017.5.1 java动态代理总结
- java动态代理的总结
- JAVA 反射 总结 之 动态代理
- java动态代理总结(狗星例子)
- Java基础学习总结(109)——Jdk动态代理和cglib动态代理总结
- Java反射学习总结四(动态代理使用实例和内部原理解析)