AOP的JDK动态代理实现
来源:互联网 发布:珠海软件怎么样 编辑:程序博客网 时间:2024/06/05 11:13
AOP(Aspect Oriented Programming)面向切面编程,技术利用“横切”的方式,通过减少系统的重复代码,降低模块间的耦合度,达到可重用的目的,有利于未来的可操作性和可维护性。
通常用途:日志记录,性能统计,安全控制,事务处理,异常处理等。
动态代理
JDK的java.lang.reflect包下的Proxy类就是构造代理的入口。
这段源代码就是创建代理对象的方法:loader 指被代理类加载; interfaces指被代理的类接口;h被代理的类的最终目标
1、代理接口
/** * @ClassName Eat * @Description (吃) 提供的服务 牛奶 面包 * @author Cheng.Wei * @date 2017年12月13日 下午10:43:23 * */public interface Eat {void milk(String name);void bread(String name);}
/** * @ClassName EatImpl * @Description TODO(这里用一句话描述这个类的作用) * @author Cheng.Wei * @date 2017年12月13日 下午10:44:41 * */public class EatImpl implements Eat{/* (non-Javadoc) * @see org.dhweicheng.Eat#milk(java.lang.String) */@Overridepublic void milk(String name) {System.out.println(name + "喝牛奶");}/* (non-Javadoc) * @see org.dhweicheng.Eat#bread(java.lang.String) */@Overridepublic void bread(String name) {System.out.println(name + "吃面包");}
3、代理类
import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * @ClassName EatAop * @author Cheng.Wei * @date 2017年12月13日 下午10:48:12 * {@link java.lang.reflect.InvocationHandler} */public class EatAop implements InvocationHandler {private Object target;public EatAop(Object target) { this.target = target; }@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("有人吃东西了");//对吃鱼的人进行记录if(method.getName().equals("bread")) {System.out.println("面包被吃了 !!!");}return method.invoke(target, args);}}
4、测试
import java.lang.reflect.Proxy;/** * @ClassName Listener * @author Cheng.Wei * @date 2017年12月13日 下午10:53:54 * */public class Listener {public static void main(String[] args) {// 被代理类ClassLoader classLoader = EatImpl.class.getClassLoader();// 被代理的接口Class[] proxyInterface = new Class[] { Eat.class };// 被代理的类的最终目标EatAop eatAop = new EatAop(new EatImpl());Eat eat = (Eat) Proxy.newProxyInstance(classLoader, proxyInterface, eatAop);eat.milk("张三");System.out.println("============");eat.bread("李四");}}
执行结果
阅读全文
0 0
- AOP的JDK动态代理实现
- AOP的底层实现--JDK动态代理,CGLIB动态代理
- JDK动态代理实现AOP
- JDK 动态代理 & AOP实现动态代理
- Aop的jdk动态代理
- aop动态代理基于jdk的的实现
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring Aop 中的JDK动态代理的实现
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- numpy中的True/False如何转化成1/0
- 关于链接的那些事
- Excel在统计分析中的应用—第九章—非参数检验-等级相关检验
- hdu1011Starship Troopers(树形dp)
- boost asio 异步实现tcp通讯
- AOP的JDK动态代理实现
- Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)
- boost asio 简单示例
- 推送服务架构
- ScrollView的滑动事件===判断是否滑到底部
- python3之1014. 福尔摩斯的约会 (20分)
- 反思
- C++中的类的理解
- WebUploader获取文件上传成功路径问题