写在前面
需求:在一些方法中做一些通用的事,比如写日志,事务之类的,
1.写一个切面类
2.在配置文件中配置
坑:配置了切面,并没有进入切面
具体实现
1.切面类实现
@Aspect
@Component
public class LogAspect {
private final Logger logger = LoggerFactory.getLogger( this.getClass() );
//"execution (* com.zhyl.core.web.control.AdminController.*(..))"
/**
* 前置通知
* @param joinPoint 该参数可以获取目标对象的信息,如类名称,方法参数,方法名称等
*/
@Before("execution(* jk.zmn.profile.controller.TestController.*(..))")
public void before(JoinPoint joinPoint){
System.out.println("我是前置通知");
}
@After("execution(* jk.zmn.profile.controller.TestController.*(..))")
public void after(JoinPoint joinPoint){
System.out.println("我是后置通知");
}
@Around("execution(* jk.zmn.profile.controller.TestController.*(..))")
public Object systemLog(ProceedingJoinPoint pro) throws Throwable {
long startTime = System.currentTimeMillis();
//访问的类名
String className = pro.getTarget().getClass().getName();
//访问的方法名
String methodName = pro.getSignature().getName();
Object result = pro.proceed();
long endTIme = System.currentTimeMillis();
long time = endTIme - startTime;
System.out.println("我是环绕通知"+className + methodName + "执行时间为:" +time);
logger.info("loggggggggggggggggg" +className + "-" +methodName + "执行时间为:" +time);
return result;
}
}
2.在springmvc配置文件中配置
image.png
3.注意,有坑
上面的配置文件是配好的,本案例是在controller层做切面编程,不能把切面类配在spring的配置文件中,因为spring会把切面类放在spring的容器中, 那么springmvc就访问不到了,如果是在service层做切面编程,就可以把切面类配置在spring的配置文件中。
网友评论