Spring学习笔记(3)(一)

2014-11-24 09:24:17 · 作者: · 浏览: 8

1.Spring AOP框架相关概念
Aspect(切面): 是通知和切入点的结合,通知和切入点共同定义了关于切面的全部内容---它的功能、在何时和何地完成其功能。

joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点。如personService的add方法之前。

Pointcut(切入点): 指一堆连接点的集合。比如所有名字为add*的方法之前。有一种表达式语言描述这个切入点。Spring使用AspectJ的切入点描述语法,有点类似于正则表达式。execution(*cn.itcast.gz.service..add*(..))。

Advice(通知): 指在连接点(切入点)的什么位置,做什么事情。

Target(目标对象):代理的目标对象。即对哪个对象进行切入其它方面的代码。

Weaving(织入): 把几个切面的代码切入核心业务组件的过程。静态织入,在编译的时候就织入(支持aop特殊编译器,AspectJ)。动态织入,编译使用的普通的java编译器,在运行的时候通过代理来进行织入(Spring)。静态织入比动态织入运行性能高。

Introduction(引入): 在不修改代码的情况下,给一个已经存在的业务组件动态添加一些方法,字段,增加功能。(动态让其去实现一些接口。)

2.Spring AOP框架的基本应用
2.1 AOP简单应用
1)引入aop相关的jar包

aopalliance.jar aop 联盟

aspectjweaver.jar AspectJ

cglib-nodep-2.1_3.jar 生成代理类

org.springframework.aop-3.1.1.RELEASE.jar aop 核心包

2)在beans.xml配置文件中加入aop命名空间

3)配置切面Bean

4)配置切面

5)配置切入点

6)配置通知

配置文件:

< xml version="1.0"encoding="UTF-8" >

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

切面Bean:

publicclass SecurityAspect {

publicboolean checkPermission() {//无参数的方法

System.out.println("执行权限检查....----------");

boolean flag = false;

if(!"admin".equals(UserContext.getUser())){

System.out.println("无权限。。。--------");

thrownew RuntimeException("没有权限!");

}else {

flag= true;

System.out.println("有权限。。。--------");

}

return flag;

}

}

全局切入点的配置:

但有多个切面要织入一个同一个切入点的时候,可以将切入点配置成全局的切入点,即将其提取到切面外面。

< xml version="1.0"encoding="UTF-8" >

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

2.2AOP通知详解—基于XML配置
1)前置通知 aop:before

2)后置通知 aop:after-running

3)异常通知 aop:after-throwing

4)最终通知 aop:after

5) 环绕通知(可以替代前面四种通知) aop:around

5) 环绕通知(可以替代前面四种通知) aop:around

所谓的环绕通知是指环绕在切入点四周的方法。用环绕通知可以在切入点方法的前面后面,任意位置执行执行自己的代码,由自己控制要不要调用目标对象的方法。

使用环绕通知时,对切面Bean中的方法是有要求的,方法必须返回Object类,并有一个ProceedingJoinPoint类型的参数。如:

public Object check(ProceedingJoinPointpoint) {

.....

Objectret = ....

returnret

}

切面Bean:

publicclass AroundAspect {

/**

* 方法必须返回Object类型且有一个ProceedingJoinPoint类型的参数

*/

public Objectcheck(ProceedingJoinPoint point) {