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 反射机制可以生成任意类型的动态代理类. ...
随机推荐
- 【WPF】修改数据层ViewModel后,UI界面未同步更新
界面:WPF(MVVM)中将集合类控件ItemsControl的ItemsSource绑定到了ViewModel中的ObservableCollection列表,ItemsControl.ItemTe ...
- 深入理解OSGI:Java模块化之路
简介 Java可能是近20年来最成功的开发技术,因其具备通用性.高效性.平台移植性和安全性而成为不同硬件平台理想的开发工具.从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Jav ...
- iptable 限制ip访问
-- 查找所有规则iptables -L INPUT --line-numbers -- 删除一条规则iptables -D INPUT 11 (注意,这个11是行号,是iptables -L INP ...
- CREATESTRUCT cs 结构体
PreCreateWindow(CREATESTRUCT& cs) typedef struct tagCREATESTRUCT { LPVOID lpCreateParams; // 创建窗 ...
- Java线程状态及 wait、sleep、join、interrupt、yield等的区别
Java中的线程状态(详见Java线程状态及转换-MarchOn): wait:Object类的实例方法,释放CPU执行权,进入等待状态,直到 被中断.被拥有该对象锁的线程唤醒(notify或not ...
- js dom 创建table标签和子属性, 以及创建多选框
代码: <div class="Category"> <span id="Edit_headerTitle">Edit Categori ...
- 解决IE6下浮层遮盖select刺穿的问题
图一未解决刺穿问题: 图二已解决 解决方法使用iframe间接挡住层,具体方法见源码 源码一(未解决刺穿): <html xmlns=" ...
- Linux 错误记录
1.libmysqlclient.so.18: cannot open shared object file: No such file or directory 解决办法: [root@linux- ...
- 阿里技术嘉年华-aDev内容感悟
之前参见了ADC然后要求在组内做了个简单的分享,因为写这个PPT的时候ADC的资料还没分享,所以仅凭自己记忆写的一点感悟罢了. PPT下载
- Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)
一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...