SpringMVC配置AOP
java的SpringMVC中经常会用到对controller层、service层、dao层的,
拦截监听,springMVC中的切换编程AOP就解决了该问题。
AOP类似于监听事件,监听软件程序的动作。
AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。
AOP可以实现对系统的不同的功能组件,进行统一处理,例如controller层、service层、dao层,
可以监听 controller层、service层、dao层的类和方法的执行之前、执行之后,抛出异常的事件。
实现步骤:
1.通过maven引入springmvc的AOP,
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aop aspect注解导包-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
2.springmvc文件中配置aop,(一定在主springmvc中配置,否则会配置无效)
<!-- AOP 注解方式 ;定义Aspect -->
<!-- 激活组件扫描功能,在包com.ly.aop.aspect及其子包下面自动扫描通过注解配置的组件-->
<context:component-scan base-package="com.relaxPalace.web.aop.aspect"/>
<!-- 启动AspectJ支持 只对扫描过的bean有效-->
<aop:aspectj-autoproxy proxy-target-class="true" />
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
3.定义aop的作用范围
SysLogAspectJ.java:
package com.relaxPalace.web.aop.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
/**
* Created by Administrator on 2017/7/2.
*/
@Component
@Aspect
public class SysLogAspectJ {
//Controller aop
@Pointcut("execution(public * com.relaxPalace.web.controller.*.*(..))")
public void checkToken(){
}
@Before("checkToken()")
public void beforeCheckToken(){
System.out.println("调用方法之前。。。。");
}
@AfterReturning("checkToken()")
public void afterCheckToken(){
System.out.println("调用方法结束之后。。。。");
}
//抛出异常时才调用
@AfterThrowing("checkToken()")
public void afterThrowing()
{
System.out.println("校验token出现异常了......");
}
//dao aop
@Pointcut("execution(public * com.relaxPalace.web.dao.*.*(..))")
public void dao(){
}
@Before("dao()")
public void beforeDao(){
System.out.println("调用dao方法之前。。。。");
}
@AfterReturning("dao()")
public void afterDao(){
System.out.println("调用dao方法结束之后。。。。");
}
//抛出异常时才调用
@AfterThrowing("dao()")
public void afterDaoThrowing()
{
System.out.println("校验dao出现异常了......");
}
}
配置完毕后在执行controller和dao的方法会执行相应的逻辑操作。