一、项目结构
二、手写一个aop需要的jar包
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.6</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.6</version> <scope>runtime</scope> </dependency>
三、编写一个切面类
package com.xiateng.interceptor;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component// 注册到spring容器中
@Aspect// 标志为切面类
public class LogAspect {
@Pointcut("execution(public * com.xiateng.controller.login.LoginController.*(..))")
private void anyMethod(){}//定义一个切入点
//前置通知:在连接点之前执行的通知
@Before("anyMethod()")
public void before(){
System.out.println("前置通知,比如创建连接对象。。。");
}
// 返回通知
@AfterReturning(returning = "ret",pointcut = "anyMethod()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
System.out.println("RESPONSE : " + ret);
}
}
@Pointcut("execution(public * com.xiateng.controller.login.LoginController.*(..))")
execution为执行的意思,第一个 * 代表任意返回值,然后是包名,.*意思是包下面的所有子包/类的所有方法,(..)表示任意参数
四、Controller入口
@Controller
@RequestMapping(value = "/user")
public class LoginController {
/**
* 初始化登录页面
* @param model
* @return
*/
@RequestMapping(value = "/login_view")
public String index(Model model){
return "login";
}
浏览器输入http://localhost:8080/user/login_view