spring aop 笔记2
Aop面向切面编程
切面(Aspect):
一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关
注点的很好的例子。在Spring AOP中,切面可以使用基于模式)或者基于@Aspect注解的方式来实现。
连接点(Joinpoint):
在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring
AOP中,一个连接点总是表示一个方法的执行。
通知(Advice):
在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等
不同类型的通知(通知的类型将在后面部分进行讨论)。许多AOP框架(包括Spring)都是以拦截器做通知模型,
并维护一个以连接点为中心的拦截器链。
切入点(Pointcut):
匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行
(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用
AspectJ切入点语法。
引入(Introduction):
用来给一个类型声明额外的方法或属性(也被称为连接类型声明(inter-type
declaration))。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用引入
来使一个bean实现IsModified接口,以便简化缓存机制。
目标对象(Target Object):
被一个或者多个切面所通知的对象。也被称做被通知(advised)对象。 既然Spring
AOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。
AOP代理(AOP Proxy):
AOP框架创建的对象,用来实现切面契约(例如通知方法执行等等)。在Spring中,
AOP代理可以是JDK动态代理或者CGLIB代理。
织入(Weaving):
把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。这些可以在编译时
(例如使用AspectJ编译器),类加载时和运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。
==================================================
==================================================
1.添加配置
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.5.4</version>
</dependency> <!-- 或者这个,他会自动导入aspectj,
用这个就可以使用annotation的注释功能-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<!-- 这一句 -->
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
<!-- 这一句 -->
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
>
2.写一个通之类,用于添加到别处
public class MyAspect {
public void beforeAdvice() {
System.out.println("前置通知....");
}
/*后置通知如果需要接受方法的返回值才能做下去的话,参数是OBj,因为不知道返回式
是什么类型*/
public void afterAdvice(Object obj) {
System.out.println("后置通知..." + obj);
}
// 如果需要获取异常信息,可以传入参数信息
public void exceptionAdvice(Exception ex) {
System.out.println("异常通知..." + ex.getMessage());
}
public void finallyAdvice() {
System.out.println("最终通知....");
}
//需要传进去参数ProceedingJoinPoint
public void aroundAdvice(ProceedingJoinPoint jp) {
try {
System.out.println("前置通知");
// 这个方法代表了目标方法的执行
Object obj = jp.proceed();
System.out.println("后置通知");
} catch (Throwable e) {
e.printStackTrace();
System.out.println("异常通知");
} finally {
System.out.println("最终通知");
}
}
}
3.将写通知的类交给spring管理
<!-- 1.将通知类交给Spring管理 -->
<bean id="myAspect" class="com.kaishengit.service.MyAspect"/> <!-- 配置aop项 -->
<aop:config>
<!-- ref定义通知类是哪一个 -->
<aop:aspect ref="myAspect">
<!-- 2.定义切入点表达式 :指的是指定通知类加载到哪个类,哪个方法上
第一个*代表方法的返回类型(各种) com.kaishengit.dao包名
..(两个)指的是本包,及其子包
*代表这个包里面的所有类
.后面的*,代表类里面的所有方法
(..)参数列表不限-->
<aop:pointcut expression="execution(* com.kaishengit.dao..*.*(..))" id="myPointcut"/>
<!-- 3.定义通知类型 -->
<!-- 前置通知 method="beforeAdvice"指定前置通知的方法,指定切入点表达式-->
<aop:before method="beforeAdvice" pointcut-ref="myPointcut"/>
<!-- 后置通知 ,有返回值的话,就把返回值给后置通知.return的是OBJ,因为返回的类型不定-->
<aop:after-returning method="afterAdvice" pointcut-ref="myPointcut" returning="obj"/>
<!-- 异常通知 如果需要知道异常信息 throwing="ex"-->
<aop:after-throwing method="exceptionAdvice" pointcut-ref="myPointcut" throwing="ex"/>
<!-- 最终通知 -->
<aop:after method="finallyAdvice" pointcut-ref="myPointcut"/> <!-- 这是环绕通知,与前面的四个有可替代性,定义了前面四个,就不要定义这个
定义这个,就不要定义前面四个,他可以替代前面的四个通知,方法在上面定义,上去看看-->
<aop:around method="aroundAdvice" pointcut-ref="myPointcut"/>
</aop:aspect>
</aop:config>
spring aop 笔记2的更多相关文章
- Spring AOP笔记
AOP的核心概念 AOP(Aspect-Oriented Programming)面向切面编程可以实现横切点与他们所影响的对象之间的解耦.如将公共的日志.权限.事务等业务隔离出来,但不影响原来程序的逻 ...
- Spring学习笔记之aop动态代理(3)
Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. Person ...
- Spring 源码学习笔记10——Spring AOP
Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...
- Spring学习笔记(二)Spring基础AOP、IOC
Spring AOP 1. 代理模式 1.1. 静态代理 程序中经常需要为某些动作或事件作下记录,以便在事后检测或作为排错的依据,先看一个简单的例子: import java.util.logging ...
- Spring4.0学习笔记(10) —— Spring AOP
个人理解: Spring AOP 与Struts 的 Interceptor 拦截器 有着一样的实现原理,即通过动态代理的方式,将目标对象与执行对象结合起来,降低代码之间的耦合度,主要运用了Proxy ...
- Spring学习笔记IOC与AOP实例
Spring框架核心由两部分组成: 第一部分是反向控制(IOC),也叫依赖注入(DI); 控制反转(依赖注入)的主要内容是指:只描述程序中对象的被创建方式但不显示的创建对象.在以XML语言描述的配置文 ...
- spring学习笔记二 注解及AOP
本节需要导入spring-aop包 注解 使用注解的目的是为了代替配置,在使用注解时,省略键时,则是为value赋值. 扫描某个包下的所有类中的注解 <?xml version="1. ...
- Spring AOP 整理笔记
一.AOP概念 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 利用AOP可以对业务逻辑的各 ...
- Spring AOP学习笔记
Spring提供了一站式解决方案: 1) Spring Core spring的核心功能: IOC容器, 解决对象创建及依赖关系 2) Spring Web ...
随机推荐
- java开发工具比较(16个工具修订版)
1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...
- Jquery ajax调用后台aspx后台文件方法(不是ashx)
在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下. (1)通过aspx.cs的静态方法+WebMethod进行处理 简单的介绍下 ...
- iOS 10 创建iMessage App
原文作者 澳大利亚19岁少年--Davis Allie ----原文地址 时值中秋佳节, 送给出门在外的程序猿们 ! 骚年们, 自己写个表情包斗图可否 ! 斗-seal.svg.png 第一. 介绍 ...
- 支持iOS9 Universal links遇到的问题
记录为iOS9上的APP支持Universal links遇到的一些问题. 在Web服务器上传apple-app-site-association文件 必须支持HTTPS获取配置文件 文件名后不加.j ...
- Laravel5 学习与使用(一)
2015-07-04 (1) 安装Laravel框架 ① 安装前的准备工作 使用Apache24 + PHP 5.6 + MySQL 开发环境完成PHP网站开发,所以Laravel的安装是建立在以上 ...
- C++对象模型2--指针cout结果
在开始之前,首先科普一下cout指针的知识,这样才能在测试程序中很好的理解: 看下面的代码: void main(void) { int a = 10; int *p = &a; cout & ...
- .NET study collection links
Parameter Binding in ASP.NET Web API http://www.asp.net/web-api/overview/formats-and-model-binding/p ...
- 01_什么是Elasticsearch
Logstash是一个开源的用于收集,分析和存储日志的工具. Kibana4用来搜索和查看Logstash已索引的日志的web接口.这两个工具都基于 Elasticsearch. Logstash: ...
- python开发_大小写转换,首字母大写,去除特殊字符
这篇blog主要是总结我们在平常开发过程中对字符串的一些操作: #字母大小写转换 #首字母转大写 #去除字符串中特殊字符(如:'_','.',',',';'),然后再把去除后的字符串连接起来 #去除' ...
- Spring MVC遭遇checkbox的问题解决方式
Spring MVC遭遇checkbox的问题是:当checkbox全不选时候,则该checkbox域的变量为null,不能动态绑定到spring的controller方法的入參上,并抛出异常. 解决 ...