视频地址
package com.imooc.girl.aspect;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
//需增加注解@Aspect
// @Component引入spring容器用
@Aspect
@Component
public class HttpAspect {
//执行com.imooc.girl.controller.GirlController.*(..)下面的所有方法前 输出1111 *的地方可以换成具体的方法名这样只拦截这个方法
@Before("execution(public * com.imooc.girl.controller.GirlController.*(..))")
//@Before("execution(public * com.imooc.girl.controller.GirlController.girlList(..))") 可以是这样的 ..表示任何参数 都会被拦截 com.imooc.girl.controller.GirlController.*(..) 表示任何方法都会被拦截 befor注解会在执行方法前进行拦截
public void log(){
System.out.print(1111);
}
@After("execution(public * com.imooc.girl.controller.GirlController.*(..))")
public void doAfter(){
System.out.print(2222222);
}
}
如何去掉重复的代码部分
定义一个公用方法
使用注解Pointcut
在Before和After注解后面调用log方法的同时通过@puintcut注解可以吧这个注解后的内容带到@Before和After里
package com.imooc.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容器用
@Aspect
@Component
public class HttpAspect {
//定义一个共用的方法
//使用Pointcut注解
@Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
public void log(){
}
//执行com.imooc.girl.controller.GirlController.*(..)下面的所有方法前 输出1111 *的地方可以换成具体的方法名这样只拦截这个方法
@Before("log()")
//@Before("execution(public * com.imooc.girl.controller.GirlController.girlList(..))") 可以是这样的 ..表示任何参数 都会被拦截 com.imooc.girl.controller.GirlController.*(..) 表示任何方法都会被拦截 befor注解会在执行方法前进行拦截
public void doBefore(){
System.out.print(1111);
}
@After("log()")
public void doAfter(){
System.out.print(2222222);
}
}
Log日志的使用
这样控制台打印出来会信息会更全面一些。
包含调用那个类、调用事件等等
package com.imooc.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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
//需增加注解@Aspect
// @Component引入spring容器用
@Aspect
@Component
public class HttpAspect {
private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
//定义一个共用的方法
//使用Pointcut注解
@Pointcut("execution(public * com.imooc.controller.GirlController.*(..))")
public void log(){
}
//执行com.imooc.girl.controller.GirlController.*(..)下面的所有方法前 输出1111 *的地方可以换成具体的方法名这样只拦截这个方法
@Before("log()")
//@Before("execution(public * com.imooc.girl.controller.GirlController.girlList(..))") 可以是这样的 ..表示任何参数 都会被拦截 com.imooc.girl.controller.GirlController.*(..) 表示任何方法都会被拦截 befor注解会在执行方法前进行拦截
public void doBefore(){
logger.info("111111");
}
@After("log()")
public void doAfter(){
logger.info("22222");
}
}