spring核心之AOP学习总结一
一:springAOP前置通知、后置通知以及最终通知
前置通知就是在切入点前面执行方面体,后置就是在后面,最终就是返回之后。
下面以一个日志记录的案例介绍:
1:创建controller类
/**
*
*/
package com.hlcui.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author Administrator
*
*/
@Controller
@RequestMapping("/web")
public class HelloController { @RequestMapping("/hello.form")
public String execute() throws Exception {
System.out.println("处理业务逻辑!");
return "hello";
} }
2:创建方面组件
/**
*
*/
package com.hlcui.aspect; /**
* @author Administrator
*
*/
public class OperatorLogger {
public void logger(){
System.out.println("-->记录用户日志");
}
}
3:声明方面组件
<!-- 配置日志组件 -->
<bean id="operatorLogger" class="com.hlcui.aspect.OperatorLogger"></bean>
4:将方面组件作用于目标组件上
<!-- 配置方面组件 -->
<aop:config>
<aop:aspect ref="operatorLogger">
<aop:before method="logger" pointcut="within(com.hlcui.controller..*)"/>
</aop:aspect>
</aop:config>
5:测试方法
@Test
/**测试通过aop切入日志*/
public void testAopPointCut() throws Exception {
String conf = "spring-mvc.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
HelloController ctrl = ac.getBean("helloController", HelloController.class);
ctrl.execute();
}
通过运行结果可以看出,在执行目标组件之前执行了方面组件,这是前置通知,如果想
后置通知或者最终通知,只需要将配置文件中的before修改为after与after-returning即可。
二:springAOP环绕通知
环绕通知相当于包括前置和后置
环绕通知使用案例如下:
1:在组件方面类中添加新的方法logger2
public Object logger2(ProceedingJoinPoint p ) throws Throwable{
String targetName = p.getTarget().getClass().getName();
String methodName = p.getSignature().getName();
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
String msg = date+"执行"+targetName+methodName;
System.out.println(msg);
Object obj = p.proceed();
System.out.println("调用目标组件业务方法后");
return obj;
}
2:组件的声明,在上一步前置通知时已经声明,这里不再声明
3:修改将方面组件用在目标组件上
<!-- 配置方面组件 -->
<aop:config>
<aop:aspect ref="operatorLogger">
<aop:around method="logger2" pointcut="within(com.hlcui.controller..*)"/>
</aop:aspect>
</aop:config>
将before修改成around即可
4:测试方法
环绕通知已经成功切入!
三:springAOP异常通知
1:修改目标组件,故意制造一个错误
/**
*
*/
package com.hlcui.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author Administrator
*
*/
@Controller
@RequestMapping("/web")
public class HelloController { @RequestMapping("/hello.form")
public String execute() throws Exception {
System.out.println("处理业务逻辑!");
Integer i = 1/0;
System.out.println(i);
return "hello";
} }
2:在方面组件类中添加一个logger3方法
public void logger3(Exception e){
StackTraceElement[] eles = e.getStackTrace();
System.out.println(eles[0].toString());
}
3:在配置文件中配置异常通知
<!-- 配置方面组件 -->
<aop:config>
<aop:aspect ref="operatorLogger">
<aop:before method="logger" pointcut="within(com.hlcui.controller..*)"/>
</aop:aspect> <aop:aspect ref="operatorLogger">
<aop:around method="logger2" pointcut="within(com.hlcui.controller..*)"/>
</aop:aspect> <aop:aspect ref="operatorLogger">
<aop:after-throwing method="logger3" throwing="e" pointcut="within(com.hlcui.controller..*)"/>
</aop:aspect>
</aop:config>
4:测试方法
通过结果可以看出异常通知成功切入!
spring核心之AOP学习总结一的更多相关文章
- spring核心之AOP学习总结二
一:springAOP常用的注解 @Aspect:声明方面组件 @Before:声明前置通知 @After-returning:声明后置通知 @After:声明最终通知 @Around:声明环绕通知 ...
- Spring IOC及AOP学习总结
一.Spring IOC体系学习总结: Spring中有两个容器体系,一类是BeanFactory.还有一类是ApplicationContext.BeanFactory提供了基础的容器功能.Appl ...
- Spring核心框架 - AOP的原理及源码解析
一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置A ...
- Spring自学教程-AOP学习(五)
Spring中的AOP 一.概述 (一)基本概念 1.什么是AOP? 面向方面编程.所谓方面即是指日志.权限.异常处理.事务处理等. 2.AOP的3个关键概念 (1)切入点(Pointc ...
- Spring核心框架 - AOP的起源及介绍
一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...
- Spring Core Programming(Spring核心编程) - AOP Concepts(AOP基本概念)
1. What is aspect-oriented programming?(什么是面向切面编程?) Aspects help to modularize cross-cutting concern ...
- Spring核心--IOC&AOP
Ioc(控制反转) 所谓的控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转. AOP(面向切面编程) ...
- Spring security 和 AOP 学习
1.Spring security 登录验证拦截器 资源管理拦截器 认证和授权: 认证:登录时候确实存在此用户. 登录要认证! 授权:登录后判断权限级别,然后赋予相应的操作权限. ...
- Spring核心框架 - AOP之动态代理机制
动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码.动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类. ...
随机推荐
- 回顾一下Unix哲学
Unix哲学是一些先哲们多方位阐述的,有多种说法.可以概括为以下几点: 模块原则:使用简洁的接口拼合简单的部件. 清晰原则:清晰胜于机巧. 组合原则:设计时考虑拼接组合. 分离原则:策略同机制分离,接 ...
- SQL SERVER 事务和锁
内容皆整理自网络 一.事务 作者:郭无心链接:https://www.zhihu.com/question/31346392/answer/59815366来源:知乎著作权归作者所有.商业转载请联系作 ...
- Activiti Modeler初探实践
以下内容对实践activiti很有用,不过我用的不是github下载的源码包编译出来的war包,不知道什么原因我打出来的包会有点问题.不过这不重要,换个地方下载来源就行,下载网址: http://dl ...
- hdfs平衡分布
这篇文章是从网上看到的,觉得很好就收藏了,但是最终不知道出处了. Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点.当HDFS出现不平衡状况的时候 ...
- MySQL优化之——安全地关闭MySQL实例
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46812371 关闭过程: 1.发起shutdown,发出 SIGTERM信号 2 ...
- mongo 杀掉慢的程序killMyRunningOps("12.23.32.21") #####这个是客户端的ip
mongodb运维(3) db.currentOp与db.killOp命令 2018.08.12 23:55 113浏览 字号 好久没更新mongo运维这块知识了,这次介绍 db.currentOp ...
- jQuery(十一):jQuery的事件
一.jQuery事件的分类 jQuery事件是对JavaScript事件的封装,常用事件分类如下: 1.基础事件 window事件. 鼠标事件. 键盘事件. 表单事件. 2.复合事件是多个事件的组合 ...
- Servlet 全局验证是否登录
Java过滤器的使用和拦截排除的实现 http://blog.csdn.net/kyunchen/article/details/52187514
- 在ASP.NET CORE下生成PDF文档
原文链接:https://www.c-sharpcorner.com/article/creating-pdf-in-asp-net-core-mvc-using-rotativa-aspnetcor ...
- 遍历QMap引发异常处理
引言 用常规方法遍历QMap,删除满足条件元素时出现“读取位置0xXXX时发生访问冲突”.查看“调用堆栈”指向QMap<int,int>::iterator::operator++()和Q ...