Java 杂谈Java&Spring基础技术

Aspect初体验

2018-07-05  本文已影响2人  z七夜

写在前面

需求:在一些方法中做一些通用的事,比如写日志,事务之类的,
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的配置文件中。

上一篇 下一篇

猜你喜欢

热点阅读