资源简介
本项目是一个demo项目,测试的主要是两个东西:
1、spring mvc 的拦截器;
2、面向切面编程AOP
在实现过程中,我尽量贴近实际开发与场景,麻雀虽小,五脏俱全,个人感觉这个项目是web框架搭建的一个极简之道实践。
项目中可能还存在很多的问题,希望大家不吝赐教,谢谢。
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.xm
文件 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.xm
文件 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\ba
............此处省略46个文件信息
- 上一篇:anigif.ocx含有注册机
- 下一篇:过零触发器MOC4031控制的交流调压电路
相关资源
- spring-context-3.2.xsd
- guns 完整视频(未加密)
- 小程序+springboot开发
- keycloak应用于rest资源保护的springboot端
- SpringBoot整合Shiro,实现从数据库加载
-
最新版spring-fr
amework-4.3.9.RELEASE-sch - springboot集成hibernate
- zookeeper+dubbo+spring
- Spring Boot自定义错误页面
- 外文翻译Spring的MVC构架模式.2018_03_1
- guns 后台管理技术文档含收费部分
- SpringJDBC外文翻译
- springboot+mybatis+pagehelper、web前端到后台
- FastDFS与 spring 整合使用 Nginx 来显示图
- Spring Web Flow
- 尚硅谷springcloud课程源码,springcloud
- 外文翻译_Spring在web中的应用
- Spring Boot多模块配置文件读取
- 韩顺平2017年Spring教学视频
- springboot使用rabbitmq工具类
- 小马哥微服务实践.txt
- SpringBootFile
- springboot+mybatis封装第二版
- maven+ssm+shiro
- cxf+spring+tomcat
- SpringBoot上传文件实例下载212710
- Spring Security技术栈开发企业级认证与
- ssh项目demo
- Activiti6工作流视频整合SpringBoot2.0
- 后端异常统一处理解决方案
评论
共有 条评论