一: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. sed——linux下对文本当控制操作(替换,追加)

    sed——linux下对文本当控制操作(替换,追加) 2011-12-12 19:27:17 分类: LINUX Linux下sed命令 1. Sed简介 sed 是一种在线编辑器,它一次处理一行内容 ...

  2. CPP_template

    泛型编程是独立于任何特定类型的方式编写代码.模板是泛型编程的基础,模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发. 模板提供通用类型和通用函数,定义中包含t ...

  3. c# 利用反射清除事件

    控件的事件清除,除了-=,就只能依靠反射来执行了. /// <summary> /// 清除一个对象的某个事件所挂钩的delegate /// </summary> /// & ...

  4. linux 获取网卡信息

    sar -n DEV 2 10:41:37 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s10:41:39 AM eth ...

  5. windows10激活工具,绿色无毒,不改浏览器主页

    最近发现一个很好用的Windows10 永久激活的工具,比KMS什么的管用,而且无毒无公害.几乎支持所有的win10版本.感兴趣的朋友可以试试.之前win10没洗白的同学,也试试吧,说不定就洗白了呢. ...

  6. SVN和IntelliJ IDEA忽略node_module设置

    SVN提交忽略node_modules 1.空白处右键>选中TortoiseSVN>设置(settings) 2.常规设置(General)>Subversion>编辑(edi ...

  7. Servlet、Filter、Listener总结

    servlet规范提供了一组标准的servlet api.servlet容器就是servlet规范的实现. 1.In Action (1)写一个类继承HttpServlet: (2)重写其中的方法. ...

  8. [hadoop读书笔记] 第五章 MapReduce工作机制

    P205 MapReduce的两种运行机制 第一种:经典的MR运行机制 - MR 1 可以通过一个简单的方法调用来运行MR作业:Job对象上的submit().也可以调用waitForCompleti ...

  9. window.location.href 跳转失败

    我恨这个问题,因为困扰已久,做为一个不称职的半开发人员,对前端非常不熟,程度仅限于alert调试的水平 这个问题似乎是IE的一个傻逼哄哄的BUG引起的,在AJAX盛行的今天,当在返回success状态 ...

  10. htop和ncdu

    今天突然发现服务器不能够mkdir了,说没空间,用df -h命令显示空间是很大的,网管过来用ncdu命令一下显示某些文件夹中有好多文件,说是因为linux中小文件太多引发,即实际空间还有很多,但是小文 ...