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 反射机制可以生成任意类型的动态代理类. ...
随机推荐
- C语言 · 删除重复元素
算法提高 11-2删除重复元素 时间限制:10.0s 内存限制:256.0MB 问题描述 为库设计新函数DelPack,删除输入字符串中所有的重复元素.不连续的重复元素也要删除. 要 ...
- vba的一个DB操作类
Option Explicit '-------------------------------------------------------- '[Class Name]: DBHelper '[ ...
- vim 小技巧
cd - 返回刚才访问的目录shift+# 在vi中查找相同的关键字vi 中o在当前游标位置后插入一行 O在当前位置前插入一行0 $到行未 行首shift+s 删除一行,并且进入insert mode ...
- mysql show global variables字符超1024会被截断
show variables 会存在数据被截断的问题: select 全局变量没有问题 官网解释:https://dev.mysql.com/doc/refman/5.6/en/variables-t ...
- IDEA 中 同一个微服务 按照多个端口启动
网上讲这个东西的很多,抄来抄去的,大部分类似,多数没讲明白为什么那么配置. 譬如eureka.client.register-with-eureka和fetch-registry是否要配置,配不配区别 ...
- 【java开发系列】—— 自定义注解
之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注 ...
- IDEA中maven项目导jar包太慢
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/PROGRAM_anywhere/article/details/53842058参考了网上的一些教程 ...
- BIO、NIO、AIO系列二:Netty
一.概述 Netty是一个Java的开源框架.提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. Netty是一个NIO客户端,服务端框架.允许快速简 ...
- Spring JDBC JdbcTemplate类示例
org.springframework.jdbc.core.JdbcTemplate类是JDBC核心包中的中心类.它简化了JDBC的使用,并有助于避免常见的错误. 它执行核心JDBC工作流,留下应用程 ...
- e860. 列出组件绑定的键盘键
This example demonstrates how to list all the key bindings in a component. Text components have an a ...