calmJava

StillWaterRunsDeep
随笔 - 3, 文章 - 11, 评论 - 0, 引用 - 0
数据加载中……

spring_6

1:
AOP中的概念:
Aspect(切面)
:指横切性关注点的抽象即为切面,它与类类似,只是两者关注点不一样,类是对物体特征的抽象,而切面是横切性关注点的抽象。
joinpoint(连接点)
:所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点,实际上joinpoint还可以是field或类构造器。
Pointcut(切入点)
:所谓切入点是指我们要对那些joinpoint进行拦截的定义。
Advice(通知)
所谓通知是指拦截到joinpoint之后所要做的事情就是通知。通知分为前置通知,后置通知,异常通知,最终通知,环绕通知。
Target(目标对象)
:代理的目标对象
Weave(织入)
:只讲aspects应用到target对象并导致proxy对象创建的过程成为织入。
Introduction(引入)
:在不修改类代码的前提下,Introduction可以再运行期为类动态的添加一些方法或Field

2:
加入Spring AOP的支持
(1):加入jar包,在配置文件中导入aop命名空间,加入<aop:aspectj-autoproxy/>元素
(2):定义切面类
(3):在切面类中加入注解:

: 在类前的注解
@Aspect

: 声明一个切入点
@Pointcut("execution(* cn.itcast.service..*.*(..))")
private void anyMethod() {} // 定义切入点的名称是通过方法的定义来定义的.

:定义前置通知
@Before("anyMethod() && args(userName)") 其中 userName 为限制方法的参数必须为String 类型的
public void doAccessCheck(String userName) {}

:定义后置通知
@AfterReturning(pointcut="anyMethod()",returning="revalue")
public void doReturnCheck(String revalue) {}

:定义例外通知
@AfterThrowing(pointcut="anyMethod()",throwing="ex")
public void doExceptionAction(Exception ex){}

:定义最终通知
@After("anyMethod()")
public void doReleaseAction() {}

:环绕通知
@Around("anyMethod()")
public doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
 return pjp.proceed();
}

以上 anyMethod() 为切入点的名称, 为要应用的切入点
args 、returning、throwing 为可不定义的可选参数,但被标注方法也要跟着参数的有无而改变方法的参数.
环绕通知的方法的签名是死格式

3:
把类加入Spring管理:
在Spring配置文件中加入或用 @Component 组件注解进行标注即可.

4:
通知流程图:
// 环绕通知
// 前置通知
try{
 // 方法执行
 // 后置通知
}catch(Exception e){
 // 例外通知
}finally{
 // 最终通知
}

5:
第 19 集

posted on 2011-01-05 20:59 calmJava 阅读(194) 评论(0)  编辑  收藏 所属分类: Spring


只有注册用户登录后才能发表评论。


网站导航: