Spring学习文档_AOP
来源:互联网 发布:天书世界武将转生数据 编辑:程序博客网 时间:2024/05/16 00:26
AOP: Aspect Oriented Programming -- 织入
工作原理为采用代理对象, 继承InvocationHandler, Struts2的Interceptor也是典型的AOP, 原理的sample:
package com.lohamce.aop;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class LogInterceptor implements InvocationHandler{private Object target;public void beforeMethod(Method method){System.out.println("["+method.getName()+" begins]");}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {beforeMethod(method);method.invoke(target, args);return null;}public Object getTarget() {return target;}public void setTarget(Object target) {this.target = target;}}
@Testpublic void testProxy() throws Exception{UserDao userDao = new UserDaoImpl();LogInterceptor li = new LogInterceptor();li.setTarget(userDao);UserDao proxy = (UserDao)Proxy.newProxyInstance(userDao.getClass().getClassLoader(), userDao.getClass().getInterfaces(), li);proxy.save(new User());proxy.remove(new User());}
在Spring中有2种方式配置AOP
1. Annotation, 使用AspectJ实现, AspectJ是AOP的框架, 实现需要加入aspectjweaver.jar和aspectjrt.jar
织入的语法比较麻烦, 使用的话,需要查文档
package com.lohamce.aop;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;@Aspect@Component("logInterceptor")public class LogInterceptor {private Object target;@Before("execution (public * com.lohamce.service.impl.*.*(..))")public void beforeMethod(){System.out.println("[Method begins]");}public Object getTarget() {return target;}public void setTarget(Object target) {this.target = target;}}
2. XML,比annotation更有优势,因为可以插拔,有可能切面类的逻辑是第三方的提供的.
<aop:config><aop:pointcut expression="execution (public * com.lohamce.service.impl.*.*(..))" id="servicePointcut"/><aop:aspect id="logAspect" ref="logInterceptor"><aop:before method="beforeMethod" pointcut-ref="servicePointcut" /></aop:aspect></aop:config>
Spring初始化之后,当执行到com.lohamce.service.impl下面的类方法时,判断是否符合表达式 (servicePointcut), 如果符合, 在执行此方法前调用logIntercetor的beforeMethod方法
<aop: advisor> 声明式的事务管理才处理
- Spring学习文档_AOP
- Spring笔记_AOP简单例子
- Spring2.5学习4.1_AOP
- 15.Spring学习笔记_AOP基础(by尚硅谷_佟刚)
- Spring mvc 学习文档
- Spring学习文档
- Spring Security4 学习文档
- Spring(基础)学习文档一
- Spring(基础)学习文档二
- Spring(基础)学习文档三
- spring mvc 文档学习笔记
- spring 官方文档,学习笔记
- spring mvc 学习文档1
- spring2.0_aop配置
- 动态代理_AOP
- 【面向切面编程_AOP】
- 【spring+hibernate学习文档】--数据分页
- 【spring+hibernate学习文档】---配置篇
- 多线程编程您不知道的5件事
- vi/vim鼠标中键粘贴不缩进的方法以及按行整体缩进的方法
- javascript图片预加载技术
- javax.naming.NoInitialContextException解决
- C#多线程|匿名委托传参数|测试您的网站能承受的压力|附源代码--升级版
- Spring学习文档_AOP
- 回调与并发: 通过实例剖析WCF基于ConcurrencyMode.Reentrant模式下的并发控制机制
- wp7在程序中直接开启摄像头(非选择器)
- android导航条的制作
- 《算法导论》系列课后思考题之-第三章《函数的增长》(下)
- 在Windows使用NodeJs和Web Framework:Express开发网站
- 【python】python的方法覆盖
- 怎么样把百度搜索引入自己的网站JS实现(附源代码)
- 常用Oracle DBA 查询