首页 > 代码库 > 12.Spring AOP配置与应用

12.Spring AOP配置与应用

  1. 两种方式:

a)     使用Annotation

b)     使用xml

  1. Annotation

a)     加上对应的xsd文件spring-aop.xsd

b)     beans.xml <aop:aspectj-autoproxy />

c)     此时就可以解析对应的Annotation了

d)     建立我们的拦截类

e)     用@Aspect注解这个类

f)      建立处理方法

g)     用@Before来注解方法

h)     写明白切入点(execution …….)

i)      让spring对我们的拦截器类进行管理@Component

  1. 常见的Annotation:

a)     @Pointcut  切入点声明 以供其他方法使用 , 例子如下:

 1 @Aspect
 2 @Component
 3 public class LogInterceptor {
 4     
 5     @Pointcut("execution(public * com.bjsxt.dao..*.*(..))")
 6     public void myMethod(){}
 7 
 8     @Around("myMethod()")
 9     public void before(ProceedingJoinPoint pjp) throws Throwable{
10         System.out.println("method before");
11         pjp.proceed();
12     }
13     @AfterReturning("myMethod()")
14     public void afterReturning() throws Throwable{
15         System.out.println("method afterReturning");
16     }
17     @After("myMethod()")
18     public void afterFinily() throws Throwable{
19         System.out.println("method end");
20     }
21         }
@Pointcut
  1. 织入点语法

a)     void !void

b)     参考文档(* ..)

如果 execution(* com.bjsxt.dao..*.*(..))中声明的方法不是接口实现 则无法使用AOP实现动态代理,此时可引入包” cglib-nodep-2.1_3.jar” 后有spring自动将普通类在jvm中编译为接口实现类,从而打到可正常使用AOP的目的.  

  1. xml配置AOP

a)     把interceptor对象初始化

b)     <aop:config

  1.                 i.          <aop:aspect …..
    1. <aop:pointcut
    2. <aop:before

例子:

 1 <bean id="logInterceptor" class="com.bjsxt.aop.LogInterceptor"></bean>
 2     <aop:config>
 3         <!-- 配置一个切面 -->
 4         <aop:aspect id="point" ref="logInterceptor">
 5             <!-- 配置切入点,指定切入点表达式 -->
 6             <!-- 此句也可放到 aop:aspect标签外 依然有效-->
 7             <aop:pointcut
 8                 expression=
 9                 "execution(public * com.bjsxt.service..*.*(..))"
10                 id="myMethod" />
11             <!-- 应用前置通知 -->
12             <aop:before method="before" pointcut-ref="myMethod" />
13             <!-- 应用环绕通知 需指定向下进行 -->
14             <aop:around method="around" pointcut-ref="myMethod" />
15             <!-- 应用后通知 -->
16             <aop:after-returning method="afterReturning"
17                 pointcut-ref="myMethod" />
18             <!-- 应用抛出异常后通知 -->
19             <aop:after-throwing method="afterThrowing"
20                 pointcut-ref="myMethod" />
21             <!-- 应用最终通知  -->
22             <aop:after method="afterFinily"
23                 pointcut="execution(public * om.bjsxt.service..*.*(..))" />
24         </aop:aspect>
25 </aop:config>
aop-xml