一: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学习总结一的更多相关文章

  1. spring核心之AOP学习总结二

    一:springAOP常用的注解 @Aspect:声明方面组件 @Before:声明前置通知 @After-returning:声明后置通知 @After:声明最终通知 @Around:声明环绕通知 ...

  2. Spring IOC及AOP学习总结

    一.Spring IOC体系学习总结: Spring中有两个容器体系,一类是BeanFactory.还有一类是ApplicationContext.BeanFactory提供了基础的容器功能.Appl ...

  3. Spring核心框架 - AOP的原理及源码解析

    一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置A ...

  4. Spring自学教程-AOP学习(五)

    Spring中的AOP 一.概述 (一)基本概念 1.什么是AOP?     面向方面编程.所谓方面即是指日志.权限.异常处理.事务处理等. 2.AOP的3个关键概念    (1)切入点(Pointc ...

  5. Spring核心框架 - AOP的起源及介绍

    一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...

  6. Spring Core Programming(Spring核心编程) - AOP Concepts(AOP基本概念)

    1. What is aspect-oriented programming?(什么是面向切面编程?) Aspects help to modularize cross-cutting concern ...

  7. Spring核心--IOC&AOP

    Ioc(控制反转) 所谓的控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转. AOP(面向切面编程) ...

  8. Spring security 和 AOP 学习

    1.Spring security 登录验证拦截器 资源管理拦截器 认证和授权:      认证:登录时候确实存在此用户. 登录要认证!      授权:登录后判断权限级别,然后赋予相应的操作权限. ...

  9. Spring核心框架 - AOP之动态代理机制

    动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码.动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类. ...

随机推荐

  1. Python的自增运算符

    今天在写一个合并两个有血list的时候,使用了while循环,不自觉的使用了i++,自测的时候发现有语法错误,还检查了好几遍,觉得应该没啥错误啊,后来google了一把,恍然大悟,原来Python早就 ...

  2. CPP_const&static

    const 1. 定义本地常量,替换宏.#define LENGHTH 16static const int LENGHTH = 16;2. const出现在星号左边,表示被指物是常量:const出现 ...

  3. linux命令实现http的get和post请求

    1. wget wget -O -  "http://$IP/host" --header="Content-Type: application/json" - ...

  4. JMeter (2) —— JMeter与WebDriver测试用户登陆以CAS SSO为例(101 Tutorial)

    JMeter (2) -- JMeter与WebDriver测试用户登陆以CAS SSO为例(101 Tutorial) 主要内容 JMeter与WebDriver测试用户登陆以CAS SSO为例 环 ...

  5. 企业私有云部署im,视频服务

    1,安全问题 2,员工跨地域 3,内部视频培训 考勤申请,设备借用申请 名片申请 会议室预订 审批 内网,局域网部署 Android源码 https://github.com/starrtc/andr ...

  6. Matlab基本用法

    转至:http://blog.sina.com.cn/s/blog_8354dda801012dyn.html 目录: 一.说明 二.数据类型及基本输入输出 三.流程控制 四.循环 五.数组.数组运算 ...

  7. QT:QObject 简单介绍

    QObject 是所有Qt对象的基类. QObject 是Qt模块的核心.它的最主要特征是关于对象间无缝通信的机制:信号与槽.使用connect()建立信号到槽的连接,使用disconnect()销毁 ...

  8. python3 实现mysql数据库连接池

    首先声明一下,这篇博客进行了通过自己的代码方式,加上这篇博客,最后总结出这段代码.参考博客连接:http://blog.csdn.net/zbc1090549839/article/details/5 ...

  9. 建议大家使用Java 8 的日期、时间,而非java.util.Date

    建议大家使用Java 8 的日期.时间,而非java.util.Date. 详细原因见:如何在Java 8中愉快地处理日期和时间 总结一下就是, java.util.Date 太乱,如 月份从0开始. ...

  10. 用OpenGL绘制平滑着色的三角形与相交区域的混合着色

    一.三角形的绘制 在OpenGL中,面是由多边形构成的.三角形可能是最简单的多边形,它有三条边.可以使用GL_TRIANGLES模式通过把三个顶点连接到一起而绘出三角形. 使用GL_TRIANGLE_ ...