Aspect初体验

写在前面

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容