我也是根据网上的信息自己做的,仅供参考。

明确一点:使用的是@Aspect注解方式,项目是maven项目。

使用@Aspect注解方式,需要修改的地方主要有:

1、pom文件,增加:

<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.7.4</version></dependency><!-- https://mvnrepository.com/artifact/aspectj/aspectjrt --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.7.4</version></dependency>

这里需要注意一个问题。我一开始这里使用的版本是1.5.4,但是在启动的时候,会遇到一个报错,

0 can't find referenced pointcut,这个问题让我很费解,后来经过网上查资料,说是环境的问题。

一般情况下:

我的jdk版本是1.7的,所以换成1.7.4ok了。

2、SpringMVC配置,我这儿是默认的名字,叫springMVC-servlet.xml

这个配置文件里需要加上

    <!-- 扫描aop,该类对应自己定义的注解类--><context:component-scan base-package="com.tarena.vote.aspect" /><!--启动对AspectJ注解的支持,proxy-target-class等于true是强制使用cglib代理--><aop:aspectj-autoproxy proxy-target-class="true"/>

3、定义注解类。

说明:我这个是实验性质的,所以并没有什么具体 的业务代码。里面可以添加你需要的业务,例如:日志记录,事务控制等等。

package com.tarena.vote.aspect;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;/*** <p>*    Description: 注解逻辑类(测试,无实际意义)* </p>** @author fcl* @date 2017年1月11日* @version v_1.0*/
@Aspect
@Component
public class AspectAdvice {/*** Pointcut* 定义Pointcut,Pointcut名称为aspectjMethod,必须无参,无返回值* 只是一个标识,并不进行调用* 切点我这儿定义的是为controller包下的所有类,所有方法都加,* 你可以指定具体的类或具体的方法*/@Pointcut("execution(* com.tarena.vote.web.controller.*.*(..))")//@Pointcut("@annotation(com.tarena.vote.aspect.AspectAdvice)")private void aspectJMethod(){};@Before("aspectJMethod()")public void doBefore(JoinPoint joinPoint){System.out.println("----dobefore()开始----");System.out.println("执行业务逻辑前做一些工作");System.out.println("通过jointPoint获得所需内容");System.out.println("----dobefore()结束----");}@Around("aspectJMethod()")public Object doAround(ProceedingJoinPoint pjp) throws Throwable{System.out.println("----doAround()开始----");System.out.println("此处可做一些类似before的工作");//核心逻辑Object retval=pjp.proceed();System.out.println("此处可做一些类似after的工作");System.out.println("----doAround()结束----");return retval;}@After(value="aspectJMethod()")public void doAfter(JoinPoint joinPoint){System.out.println("----doAfter()开始----");System.out.println("执行核心逻辑之后,所做工作");System.out.println("通过jointPoint获得所需内容");System.out.println("----doAfter()结束----");}@AfterReturning(value="aspectJMethod()",returning="retval")public void doReturn(JoinPoint joinPoint, String retval){System.out.println("AfterReturning()开始");System.out.println("Return value= "+retval);System.out.println("此处可对返回结果做一些处理");System.out.println("----AfterReturning()结束----");}@AfterThrowing(value="aspectJMethod()", throwing="e")public void doThrowing(JoinPoint joinPoint,Exception e){System.out.println("-----doThrowing()开始-----");System.out.println(" 错误信息:"+e.getMessage());System.out.println(" 此处意在执行核心业务逻辑出错时,捕获异常,并可做一些日志记录操作等等");System.out.println(" 可通过joinPoint来获取所需要的内容");System.out.println("-----End of doThrowing()------");}
}
/*** 自定义注解。* 这个自定义注解我也不知是用来干啥的,我感觉可能是用来描述的吧,* 感觉项目中并没有地方需要用到,但是看网上的例子都有加* 如果大神看见了,帮我解答一下。*/
package com.tarena.vote.aspect;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/***自定义注解 拦截Controller*/@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public  @interface SystemLog {String operationType()  default "";   //操作类型String methods()  default "";  //新增用户String description()  default "";  //
}

至此,需要做的工作已经完成了。运行项目的结果如下:

转载于:https://blog.51cto.com/fengcl/1891863

Spring+SpringMVC+maven使用@aspectJ添加切面相关推荐

  1. spring+springmvc+maven+mongodb

    1.前言 最近项目开发使用到了spring+springmvc+maven+mongodb,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...

  2. 架构之路之spring+springmvc+maven+mongodb的搭建(转载:http://blog.csdn.net/tomcat_2014/article/details/55100130)

    1.前言 最近项目开发使用到了spring+springmvc+maven+MongoDB,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...

  3. maven ssm框架 mysql_SSM框架(IDEA+Spring+SpringMVC+Maven+Mybatis+MySQL)

    [实例简介] SSM框架(IDEA+Spring+SpringMVC+Maven+Mybatis+MySQL),搭建SSM框架,利用mybatis-plus插件自动生成数据库相关代码. [实例截图] ...

  4. javaweb各种框架组合案例(三):maven+spring+springMVC+hibernate

    1.hibernate译为"越冬",指的是给java程序员带来春天,因为java程序员无需再关心各种sql了: 2.hibernate通过java类生成数据库表,通过操作对象来映射 ...

  5. MAVEN整合Spring+SpringMVC+Mybatis

    2016/1/20 14:47:28 原创,转载请注明出处 曾经看过<那些年我们一起追过的女孩>,片中有个比较经典的画面,至今记忆犹新,柯景腾多年后,做了一名作家,每天面对电脑码字,背后是 ...

  6. SSM框架整合一(springmvc+spring+mybatis+maven+tomcat)

    一,环境说明 jdk1.7.0_07(cmd命令行输入java -version查看),点击下载 eclipse Kepler Service Release 2 apache-maven-3.3.9 ...

  7. spring中使用Aspectj进行切面编程

    推荐 个网购 优惠券 领取网站 U券网 uquanfree.com 点击链接进入 Spring的AOP可以通过对@AspectJ注解的支持和在XML中配置来实现,本文通过实例简述如何在Spring中使 ...

  8. 手把手教你整合 SpringMvc+Spring+MyBatis+Maven

    注:该教程是参考孙宇老师的<SpringMvc+Spring+Mybatis+Maven整合视频教程1>整理的,花了我六个多小时,边复习视频边调代码边写教程,保证该教程每一步都能正确执行, ...

  9. SSM框架整合(IntelliJ IDEA + maven + Spring + SpringMVC + MyBatis)

    使用IDEA创建Spring + SpringMVC + MyBatis 框架的Maven的项目. 一. 创建maven项目 1. File -> New Module,进入创建项目窗口. 2. ...

最新文章

  1. 谷歌将屏蔽一切与加密货币相关的广告 6月正式生效
  2. 不当免费技术支持的10种方法
  3. 阿里数据中台系列之Apsara Stack控制台用户角色权限及操作界面(一)
  4. 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)---各种线程相关操作类...
  5. VC++CopyFile函数的用法
  6. SpringBoot-视图解析与模板引擎
  7. php 10分钟过期,如何在30分钟后过期PHP会话?
  8. opa847方波放大电路_比例阀伺服放大器设计(一)
  9. Hbase PleaseHoldException错误
  10. 用自定义函数联合IF函数实现“一对多”查询
  11. gmail邮箱 收信服务器,用fetchmail 通过gmail 收邮件
  12. 通过telnet自动下载cfg配置文件
  13. K-L变换原理、图像压缩与人脸识别实战(附matlab代码)
  14. PulseAudio多线程通信:pthread_cond_broadcast/pthread_cond_signal/pthread_cond_wait(九)
  15. 2018 ideal 链接数据_利用 IDEA HTTP 请求文件访问 API 接口
  16. 74HC595芯片应用
  17. SMART法则——笔记与答案
  18. python封装举例_卷1:第14章 Python打包工具
  19. CF833D Red-Black Cobweb
  20. Javascript笔记大全02

热门文章

  1. APUE 学习笔记(三) 文件和目录
  2. text-overflow:ellipsis溢出显示省略号兼容所有浏览器的解决办法
  3. Delphi2CS破解 Delphi 转换C#
  4. vc++ cfile 文件操作
  5. k8s核心技术-Pod(概念和存在意义)_Pod多进程设计_Pause根容器---K8S_Google工作笔记0020
  6. Netty工作笔记0078---Netty其他常用编解码器
  7. Android学习笔记---20_采用ContentProvider对外共享数据, UriMatcher类使用介绍 ,ContentUris类使用介绍,使用ContentResolver操作Conte
  8. 打包windows 和 linux caffe 版本的人脸识别 人脸年龄估计 人脸性别模型的总结
  9. echarts中国地图描绘
  10. 2015-12-01 SQL查询语句基础