springMVC版本是4.3.7.RELEASE,pom.xml中添加AOP的依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
在org.taian.web包下新建LogAspect.java
@Aspect
@Component
public class LogAspect {
@Before("execution(* org.taian.web.Test1.*(..)) && !execution(* org.taian.web.Test1.getUsers())")
public void log(){
System.oug.println("before logs");
}
}
在spring-web.xml配置文件中添加配置:
<!-- AOP 注解方式 ;定义Aspect -->
<!-- 激活组件扫描功能,在包"org.taian.web及其子包下面自动扫描通过注解配置的组件-->
<context:component-scan base-package="org.taian.web"/>
<!-- 启动AspectJ支持 只对扫描过的bean有效-->
<aop:aspectj-autoproxy proxy-target-class="true" />
@Before("execution(* org.taian.web.Test1.*(..)) && !execution(* org.taian.web.Test1.getUsers())") //该标签声明次方法是一个前置通知:在目标方法开始之前执行
@After后置通知(无论方法是否发生异常都会执行,所以访问不到方法的返回值)
@AfterReturning返回通知(在方法正常结束执行的代码),返回通知可以访问到方法的返回值!
@AfterThrowing异常通知(方法发生异常执行的代码),可以访问到异常对象;且可以指定在出现特定异常时执行的代码
@Around环绕通知(需要携带类型为ProceedingJoinPoint类型的参数),环绕通知包含前置、后置、返回、异常通知;ProceedingJoinPoin 类型的参数可以决定是否执行目标方法,且环绕通知必须有返回值,返回值即目标方法的返回值
在execution表达之中可以使用逻辑判断,来实现方法的排除