资源简介

本项目是一个demo项目,测试的主要是两个东西:
1、spring mvc 的拦截器;
2、面向切面编程AOP
在实现过程中,我尽量贴近实际开发与场景,麻雀虽小,五脏俱全,个人感觉这个项目是web框架搭建的一个极简之道实践。
项目中可能还存在很多的问题,希望大家不吝赐教,谢谢。

资源截图

代码片段和文件信息

package demo.spring.aspect.myAspect;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

/** 定义切面类 */
@Component
@Aspect
public class MyAopAspect {

    private static Logger logger = Logger.getLogger(MyAopAspect.class);

    /**
     * @Pointcut(value = “execution (* demo.spring.aspect.service.impl.*.*(..))“)
     * 定义统一拦截的切入点,其中第一个*表示任意返回类型,第二个*表示任意类名,
     * 假如第二个*前面是两个.则表示包括包里面的子包,第三个*表示任意方法名,后面的小括号表示任意参数值
     * 同理,可以是:@Pointcut(value = “execution (* demo.spring.aspect.service.impl.AspectServiceImpl.*(..))“)
     * */
    @Pointcut(“execution (* demo.spring.aspect.service.impl.*.*(..))“)
    public void myPointCut() {

    }

    @Before(“myPointCut()“)
    public void myPointCutBefore(JoinPoint point) {
        logger.info(“切面Before(下面打印方法及参数)“);
        printMethodParams(point null);
    }

    @After(“myPointCut()“)
    public void myPointCutAfter(JoinPoint point) {
        logger.info(“切面After“);
    }

    @AfterReturning(value = “myPointCut()“ returning = “result“)
    public void myPointCutAfterReturning(JoinPoint point object result) {
        logger.info(“切面AfterReturning(下面打印方法、参数及结果)“);
        printMethodParams(point result);
    }

    @AfterThrowing(pointcut = “myPointCut()“ throwing = “throwable“)
    public void afterThrowing(JoinPoint point Throwable throwable) {// 报错切面
        // 打印报错
        printMethodParams(point “切面-方法异常--“ + throwable.getMessage());
    }

    @Around(“myPointCut()“)
    public object around(ProceedingJoinPoint point) { // 在程序运行前后执行,此处统计程序运行时间
        String className = point.getTarget().getClass().getSimpleName();
        String methodName = point.getSignature().getName();
        object[] methodArgs = point.getArgs(); // 获取方法的参数值数组。
        StringBuffer methodArgsStr = new StringBuffer();
        for (object obj : methodArgs) {
            methodArgsStr.append(obj.toString()).append(““);
        }
        try {
            logger.info(String.format(“切面around - start[className=%s][methodName=%s]“ className methodName));
            long startTimeMillis = System.currentTimeMillis();
            //调用 proceed() 方法才会真正的执行实际被代理的方法
            object result = point.proceed();
            long execTimeMillis = System.currentTimeMillis() - startTimeMillis;
            logger.info(String.format(“切面around - end[className=%s][methodName=%s][result=%s]-耗时:%sms“ className
                    methodName result execTimeMillis));
            return result;
        } catch (Throwable te) {
            logger.err

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-26 21:53  demo.spring.aspect\
     文件        1312  2019-01-26 20:45  demo.spring.aspect\.classpath
     文件        1094  2019-01-26 14:52  demo.spring.aspect\.project
     目录           0  2019-01-26 21:53  demo.spring.aspect\.settings\
     文件         639  2019-01-26 14:52  demo.spring.aspect\.settings\.jsdtscope
     文件         430  2019-01-26 17:50  demo.spring.aspect\.settings\org.eclipse.jdt.core.prefs
     文件          90  2019-01-26 14:52  demo.spring.aspect\.settings\org.eclipse.m2e.core.prefs
     文件         695  2019-01-26 14:52  demo.spring.aspect\.settings\org.eclipse.wst.common.component
     文件         252  2019-01-26 20:45  demo.spring.aspect\.settings\org.eclipse.wst.common.project.facet.core.xml
     文件          49  2019-01-26 14:52  demo.spring.aspect\.settings\org.eclipse.wst.jsdt.ui.superType.container
     文件           6  2019-01-26 14:52  demo.spring.aspect\.settings\org.eclipse.wst.jsdt.ui.superType.name
     文件          50  2019-01-26 14:52  demo.spring.aspect\.settings\org.eclipse.wst.validation.prefs
     目录           0  2019-01-26 21:53  demo.spring.aspect\log\
     文件       16651  2019-01-26 21:27  demo.spring.aspect\log\myLog-20190126.log
     文件        2577  2019-01-26 19:41  demo.spring.aspect\pom.xml
     文件        1364  2019-01-26 21:40  demo.spring.aspect\readme.txt
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\java\
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\java\demo\
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\java\demo\spring\
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\java\demo\spring\aspect\
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\java\demo\spring\aspect\myAspect\
     文件        4518  2019-01-26 21:01  demo.spring.aspect\src\main\java\demo\spring\aspect\myAspect\MyAopAspect.java
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\java\demo\spring\aspect\service\
     文件         233  2019-01-26 21:07  demo.spring.aspect\src\main\java\demo\spring\aspect\service\IAspectService.java
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\java\demo\spring\aspect\service\impl\
     文件         520  2019-01-26 21:07  demo.spring.aspect\src\main\java\demo\spring\aspect\service\impl\AspectServiceImpl.java
     目录           0  2019-01-26 21:53  demo.spring.aspect\src\main\java\demo\spring\aspect\web\
     文件        1771  2019-01-26 21:09  demo.spring.aspect\src\main\java\demo\spring\aspect\web\AspectTestController.java
     文件         657  2019-01-26 17:21  demo.spring.aspect\src\main\java\demo\spring\aspect\web\baseController.java
............此处省略46个文件信息

评论

共有 条评论