1,必须先在POM.xml加入依赖
<!--aop,过滤器,拦截器,比如让http请求必须在登陆的情况下才能访问方法;1,引入依赖;2,在项目中建立一个aspect文件夹(包);3,建立一个HttpAspect类,注解为@Aspect-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
</dependency>
2,
package com.deng.hongbao.aspect;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component//引入到spring容器里去,以便其它类可以引入
public class HttpAspect {
// 1,@Before 执行方法前执行先执行这个方法;使用了aspect会execution执行对所有的public方法拦截,这里是拦截com.deng.hongbao.web.HongBaoController.add(..)具体到了add这个方法add(..)加两个点表示方法里不管是任何参数都会被拦截
// @Before("execution(public * com.deng.hongbao.web.HongBaoController.add(..))")
// public void log(){
// System.out.println("在执行add()前,会先打印log()拦截器,在这个方法里可以判断用户是否登陆,如果登录,则可以访问,否则拦截直接return");
// }
// 2,拦截HongBaoController类里的所有方法
/*@Before("execution(public * com.deng.hongbao.web.HongBaoController.*(..))")
public void log(){
System.out.println("在执行add()前,会先打印log()拦截器,在这个方法里可以判断用户是否登陆,如果登录,则可以访问,否则拦截直接return");
}*/
// 3,被拦截的类方法执行完后会执行这个方法
/*@After("execution(public * com.deng.hongbao.web.HongBaoController.*(..))")
public void doAfter(){
System.out.println("在执行被拦截的类的所有方法后,会执行这里这个方法");
}*/
// 4,综上,2和3点发一有重复代码"execution(public * com.deng.hongbao.web.HongBaoController.*(..))",需要进行改造,注释上述代码
@Pointcut("execution(public * com.deng.hongbao.web.HongBaoController.*(..))")
public void logs(){
}
@Before("logs()")
public void doBefore(){
System.out.println("类被拦截,执行方法前先执行这里的方法");
}
@After("logs()")
public void doAfters(){
System.out.println("类被拦截,执行方法后会执行这里的这个方法");
}
}