spring aop是基于spring IOC容器来管理以及使用了JDK自身的动态代理来实现,程序运行时在被切面前后动态进行的一些逻辑处理。
package com.daosheng.component; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * JDK动态代理的实现 * 实现InvocationHandler接口,重写invoke方法 * @author fanghb * */ public class LogIntercepter implements InvocationHandler{ /** * 声明目标对象也就是被代理对象 */ private Object target; /** * 获得代理对象, * 这个代理对象是由传入的接口类型动态构造出来的一个代理类实例类型, * 这个代理类是JVM在内存中动态构造的动态类 * * tar.getClass().getClassLoader() 代理类加载器需和目标对象类加载器一致 * tar.getClass().getInterfaces() 代理对象需实现目标对象所实现的接口 * this 调用此方法对象本身 * @param tar 被代理对象 * @return */ public Object getProxy(Object tar) { this.target = tar; Object proxy = Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this); return proxy; } /** * 此方法在被代理对象的方法被调用之前触发, * 可以对被代理类方法调用的前后进行一些逻辑处理 * * @param proxy 代理对象 * @param method 当前被调用的方法 * @param args 当前被调用的方法参数 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; before(method);//被代理类方法调用前的逻辑处理 try { result = method.invoke(target, args);//调用被代理类方法 } catch (Exception e) { e.printStackTrace(); } after(method);//被代理类方法调用后的逻辑处理 return result; } /** * 被代理类方法调用前后的逻辑处理 * * @param m 当前被调用的方法 */ public void before(Method method) {//预处理 System.out.println("织入预处理逻辑到" + method.getName() + "方法"); } public void after(Method method) {//后处理 System.out.println("织入后处理逻辑到" + method.getName() + "方法"); } }
测试:
package com.daosheng.service; import com.daosheng.component.LogIntercepter; import com.daosheng.pojo.User; import com.daosheng.service.impl.UserServiceImpl; //测试 public class LogIntercepterTest { public static void main(String[] args) { LogIntercepter log = new LogIntercepter(); UserService proxy = (UserService) log.getProxy(new UserServiceImpl()); User user = new User(); proxy.saveUser(user); System.out.println(); proxy.deleteUser(user); } }
输出:
织入预处理逻辑到saveUser方法 user saved ... 织入后处理逻辑到saveUser方法 织入预处理逻辑到deleteUser方法 user deleted ... 织入后处理逻辑到deleteUser方法
相关推荐
NULL 博文链接:https://zhang-yingjie-qq-com.iteye.com/blog/319927
AOP的意思就是面向切面编程。本文主要是通过梳理JDK中自带的反射机制,实现 AOP动态代理模式,这也是Spring AOP 的实现原理
Spring AOP面向方面编程原理:AOP概念,主要介绍面向对象的概念及原理,及作者的一些理解。
代理模式与动态代理--Spring AOP原理.doc
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理
Spring AOP的实现机制中文版,动态代理及原理,自定义类加载器
spring aop jar 包
描述一下Spring AOP? 在Spring AOP中关注点(concern)和横切关注点(cross-cutting concern)有什么不同? AOP有哪些可用的实现? Spring中有哪些不同的通知类型(advice types)? Spring AOP 代理是什么? 引介...
有一天在用回调模版的时候,忽然间又想到jdk自带的Proxy类似乎不是怎么好用,为何不把其做成回调模版呢,可以将其改造称类似spring Aop 代码如下: package com.fjx.proxy.up.test; import ...
spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop spring aop
一、适合人群 1、具备一定Java编程基础,初级开发者 ...(需要知道原理的请看spring aop源码,此处不做赘述) 3、可在现有源码上快速进行功能扩展 4、spring boot,mybatis,druid,spring aop的使用
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
AOP 动态代理(Proxy invocationHandler),Spring的动态代理的介绍
基于注解实现SpringAop基于注解实现SpringAop基于注解实现SpringAop
SpringAOP原理及拦截器.pdf
SpringAOP原理及拦截器.docx
Spring源代码解析(五):Spring_AOP获取Proxy.doc
SpringAOP原理及拦截器.doc
spring之AOP(动态代理),包括jdk动态代理和CGLib动态代理