AspectJ学习总结
来源:互联网 发布:js 获取html属性值 编辑:程序博客网 时间:2024/06/10 01:33
AspectJ 是spring 切面编程的一种实现方式。以前的切面是用spring AOP。但是由于种种原因,现在更多的是使用AspectJ来实现spring的切面编程
AspectJ是采用静态代理的方式。即在程序运行前代理类就已经改变了(源码已经改变了,因为在编译的时候AspectJ机制会动态的织入代理类。这个时候用特定的工具查看源码即可发现源码已经发生改变);动态代理:程序运行的时候在内存中生成代理类的对象。在调用代理类的时候均使用内存中的代理对象(源码不会改变)。采用静态代理有如下好处:
- 静态代理的运行效率高于动态代理。
package hello.aspect;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;/** * Created by Administrator on 2017/8/24. * 切面练习类 * 各种advice的顺序. Around > before > 执行方法 > Around > afterReturning > after * @After 可以用于清理现场。比如释放资源等等 */@Aspectpublic class AspectDeclare { @Pointcut("execution(* hello.aspect.AspectTest.*(..))") //从前到后的正则意义: 方法的返回类型--包名--类名--所有方法 public void printMessage() { } @Before(value = "printMessage()") public void before(JoinPoint joinPoint) throws Exception{ System.out.println("先于这个之前执行" + joinPoint.getSignature().getName()); } /** afterReturning:后置通知(应用:常规数据处理) 方法正常返回后执行,如果方法中抛出异常,通知无法执行,必须在方法执行后才执行,所以可以获得方法的返回值。*/ @AfterReturning(value = "execution(* hello.aspect.AspectTest.*(..))", returning = "ret") public void afterReturning(JoinPoint joinPoint, Object ret) { System.out.println("后置通知:" + joinPoint.getSignature().getName() + " ---returning value:" + ret); } /** * around:环绕通知(应用:十分强大,可以做任何事情) * 方法执行前后分别执行,可以阻止方法的执行,必须手动执行目标方法 */ @Around("printMessage()") public Object myAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("环绕执行前"); Object obj = proceedingJoinPoint.proceed(); System.out.println("环绕执行后"); return obj; }}粗略看了下AspectJ的相关内容。简单使用不难。记住里面几个关键点。然后记下里面正则的语法即可
阅读全文
0 0
- aspectJ的学习总结
- AspectJ学习总结
- AspectJ 学习
- AspectJ 学习
- 学习笔记之springAOP的aspectJ实现注意点总结
- AspectJ学习笔记(二)
- AspectJ学习笔记(三)
- AspectJ学习笔记
- spring AspectJ aop学习
- aspectj学习记录
- Spring学习 AspectJ
- aspectJ学习用法
- AspectJ学习过程
- AspectJ 学习笔记
- AspectJ学习笔记之Pointcut
- AspectJ学习笔记之Advice
- Spring Aspectj AOP配置学习
- AOP技术学习之AspectJ
- Opencv-python接口:轮廓检测
- 记一次SQL查询
- 进程与线程-2、用户级线程切换过程
- uva 1404 求很大数的素数算法
- 网络流量监控告警
- AspectJ学习总结
- Dialog中存在radiogroup动态添加radiobutton的ID问题
- Struts2 如何用JS获取sx:datetimepicker选择的日期
- Android Drawable 和 xml文件转化关系
- CentOS 7 安装 ShadowSocks 客户端
- 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
- solr搜索结果按某字段排序
- MyBatis--动态SQL
- 八、Shell数组:shell数组的定义、数组长度