spring核心之AOP学习总结二

Posted 格物致知

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring核心之AOP学习总结二相关的知识,希望对你有一定的参考价值。

一:springAOP常用的注解

@Aspect:声明方面组件

@Before:声明前置通知

@After-returning:声明后置通知

@After:声明最终通知

@Around:声明环绕通知

@After-throwing:声明异常通知

 

二:使用SpringAOP的注解对总结一中的案例进行重构

1:注释掉方面组件的声明以及将方面组件应用到目标组件的配置

 1 <!-- 配置日志组件 
 2     <bean id="operatorLogger" class="com.hlcui.aspect.OperatorLogger"></bean>
 3     
 4      配置方面组件 
 5     <aop:config>
 6         <aop:aspect ref="operatorLogger">
 7             <aop:before method="logger" pointcut="within(com.hlcui.controller..*)"/>
 8         </aop:aspect>
 9         
10         <aop:aspect ref="operatorLogger">
11             <aop:around method="logger2" pointcut="within(com.hlcui.controller..*)"/>
12         </aop:aspect>
13         
14         <aop:aspect ref="operatorLogger">
15             <aop:after-throwing method="logger3" throwing="e" pointcut="within(com.hlcui.controller..*)"/>
16         </aop:aspect>
17     </aop:config>-->
18     
19     <!-- 开启SpringAOP的注解扫描 -->
20     <aop:aspectj-autoproxy proxy-target-class="true"/>

2:使用@Aspect注解声明方面组件,并且在方面组件上面声明前置、后置或者是环绕通知

 1 /**
 2  * 
 3  */
 4 package com.hlcui.aspect;
 5 
 6 import java.text.SimpleDateFormat;
 7 import java.util.Date;
 8 
 9 import org.aspectj.lang.ProceedingJoinPoint;
10 import org.aspectj.lang.annotation.AfterThrowing;
11 import org.aspectj.lang.annotation.Around;
12 import org.aspectj.lang.annotation.Aspect;
13 import org.aspectj.lang.annotation.Before;
14 import org.springframework.stereotype.Component;
15 
16 
17 /**
18  * @author Administrator
19  *
20  */
21 @Aspect
22 @Component
23 public class OperatorLogger {
24     
25     @Before("within(com.hlcui.controller..*)")
26     public void logger(){
27         System.out.println("-->记录用户日志");
28     }
29     
30     @Around("within(com.hlcui.controller..*)")
31     public Object logger2(ProceedingJoinPoint p ) throws Throwable{
32         String targetName = p.getTarget().getClass().getName();
33         String methodName = p.getSignature().getName();
34         String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
35         String msg = date+"执行"+targetName+methodName;
36         System.out.println(msg);
37         Object obj = p.proceed();
38         System.out.println("调用目标组件业务方法后");
39         return obj;
40     }
41     
42     @AfterThrowing(pointcut="within(com.hlcui.controller..*)",throwing="e")
43     public void logger3(Exception e){
44         StackTraceElement[] eles = e.getStackTrace();
45         System.out.println(eles[0].toString());
46     }
47 }

3:运行测试方法

通过结果可以看出,通过注解声明方面组件成功切入目标组件。

以上是关于spring核心之AOP学习总结二的主要内容,如果未能解决你的问题,请参考以下文章

Spring 4 官方文档学习核心技术之Spring AOP

Spring学习总结——Spring AOP总结

Spring学习总结之面向切面(AOP)

Spring核心思想之IOC总结

Spring AOP初步总结

Spring框架系列 - 深入浅出Spring核心之面向切面编程(AOP)