JDK动态代理(Spring AOP理解的基础)
来源:互联网 发布:四川网络广播电视台 编辑:程序博客网 时间:2024/06/07 09:13
我这里只是举一个简单的例子,自己参看以下JDK的API就可以完全理解了:
步骤1:创建一个接口IService
package jimmee.cn.edu.zju;
public interface IService
...{
public boolean getService(String data);
}
public interface IService
...{
public boolean getService(String data);
}
步骤2:创建这个接口的实现类ServiceImpl
package jimmee.cn.edu.zju;
public class ServiceImpl implements IService
...{
public boolean getService(String data)
...{
if(data.equals("retrieve service"))
return true;
else
return false;
}
}
public class ServiceImpl implements IService
...{
public boolean getService(String data)
...{
if(data.equals("retrieve service"))
return true;
else
return false;
}
}
步骤3:采用JDK的动态代理产生一个拦截器:
package jimmee.cn.edu.zju;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;
public class ServiceHandler implements InvocationHandler
...{
Logger log=Logger.getLogger(ServiceHandler.class);
// 在拦截器里需要保存一个被代理的对象的引用
private Object delegate;
// 通过构造方法设置被代理的对象
public ServiceHandler(Object delegate)
...{
this.delegate = delegate;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
...{
log.info("===============before invoke=========");
// 调用真正的实现
boolean bFlag = (Boolean) method.invoke(delegate, args);
if (bFlag)
...{
log.info("Get service success!");
} else
...{
log.info("Get service failed!");
}
log.info("===============after invoke=========");
return method.invoke(delegate, args);
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import org.apache.log4j.Logger;
public class ServiceHandler implements InvocationHandler
...{
Logger log=Logger.getLogger(ServiceHandler.class);
// 在拦截器里需要保存一个被代理的对象的引用
private Object delegate;
// 通过构造方法设置被代理的对象
public ServiceHandler(Object delegate)
...{
this.delegate = delegate;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
...{
log.info("===============before invoke=========");
// 调用真正的实现
boolean bFlag = (Boolean) method.invoke(delegate, args);
if (bFlag)
...{
log.info("Get service success!");
} else
...{
log.info("Get service failed!");
}
log.info("===============after invoke=========");
return method.invoke(delegate, args);
}
}
步骤4:junit测试:
package jimmee.cn.edu.zju;
import java.lang.reflect.Proxy;
import junit.framework.TestCase;
public class ProxyTest extends TestCase
...{
public void testProxy()
...{
//实现业务逻辑的类
ServiceImpl service=new ServiceImpl();
//JDK动态代理的拦截器,拦截器里需要保存业务逻辑类的对象
ServiceHandler handler=new ServiceHandler(service);
//创建业务逻辑类的动态代理类
IService proxy=(IService) Proxy.newProxyInstance(service.getClass().getClassLoader(),
service.getClass().getInterfaces(),
handler);
//动态代理类来调用方法
proxy.getService("retrieve service");
}
}
import java.lang.reflect.Proxy;
import junit.framework.TestCase;
public class ProxyTest extends TestCase
...{
public void testProxy()
...{
//实现业务逻辑的类
ServiceImpl service=new ServiceImpl();
//JDK动态代理的拦截器,拦截器里需要保存业务逻辑类的对象
ServiceHandler handler=new ServiceHandler(service);
//创建业务逻辑类的动态代理类
IService proxy=(IService) Proxy.newProxyInstance(service.getClass().getClassLoader(),
service.getClass().getInterfaces(),
handler);
//动态代理类来调用方法
proxy.getService("retrieve service");
}
}
最后:输出结果如下:
2008-03-10 14:41:32,625 INFO [jimmee.cn.edu.zju.ServiceHandler] - ===============before invoke=========
2008-03-10 14:41:32,625 INFO [jimmee.cn.edu.zju.ServiceHandler] - Get service success!
2008-03-10 14:41:32,625 INFO [jimmee.cn.edu.zju.ServiceHandler] - ===============after invoke=========
2008-03-10 14:41:32,625 INFO [jimmee.cn.edu.zju.ServiceHandler] - Get service success!
2008-03-10 14:41:32,625 INFO [jimmee.cn.edu.zju.ServiceHandler] - ===============after invoke=========
- JDK动态代理(Spring AOP理解的基础)
- spring Aop理解 一:jdk 动态代理
- Spring AOP基础—JDK动态代理
- spring的AOP(二)----JDK动态代理
- Spring AOP JDK动态代理
- jdk动态代理&spring aop
- spring对AOP的支持(JDK的动态代理实现AOP和CGLIB实现AOP)
- 基于Spring AOP的JDK动态代理和CGLIB代理
- spring AOP的基础:动态代理
- Spring之AOP的实现(JDK动态代理:只能代理接口,不能代理类)
- 理解Spring AOP 原理(二)JDK,CGLIB动态代理以及ProxyFactory
- spring基础概念AOP与动态代理理解
- 浅析Spring AOP源码(十三) jdk的动态代理和cglib的代理
- Aop的jdk动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- UML类图关系汇总
- 关于dual表的建立
- javascript setTimeOut中运行带参数的函数
- Java代码优化方法
- MYSQL STRING
- JDK动态代理(Spring AOP理解的基础)
- javascript settimeout中使用this
- 2000-xp详细进程表
- 机子能上QQ但网页无法打开
- JScrollPane的简单用法!
- 表格行变列
- 我的程序作品(中国购购网www.googoow.com)
- 简单的电脑提速
- 教你给1GB或者更大容量内存的电脑提速