Spring+SpringMVC+maven使用@aspectJ添加切面

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

明确一点:使用的是@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 "";  //
}

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

时间: 2024-12-17 09:39:53

Spring+SpringMVC+maven使用@aspectJ添加切面的相关文章

spring+springMVC+Maven+mysql环境搭建

转载: http://www.importnew.com/20215.html 首先看一下项目截图: 搭建完毕,访问结果: mysql数据 CREATE TABLE `t_user` ( `USER_ID` int(11) NOT NULL AUTO_INCREMENT, `USER_NAME` char(30) NOT NULL, `USER_PASSWORD` char(10) NOT NULL, PRIMARY KEY (`USER_ID`), KEY `IDX_NAME` (`USER_

[Java] Spring + SpringMVC + Maven + JUnit 搭建

示例项目下载: https://github.com/yangyxd/SpringDemo 利用前面 SpringMVC 项目的配置方式,完成初步的项目创建.下面只讲一些不同之处. 传送门: [Java] Maven 建立 Spring MVC 工程 目录结构 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins

【Spring实战】—— 13 AspectJ注解切面

前面了解了典型的AOP基于配置的使用方法,下面介绍下如何依赖于注解来实现AOP. 基于注解降低了配置文件的复杂程度,但是引入了程序间的耦合,其中的优劣待用户自己判断了. 需要注意的是,确定AspectJ与JDK之间的版本,否则会报错,详情请见. 首先看一下基于注解的切面类,这时的切面不仅仅是一个POJO类了,与AOP进行了紧密的耦合.但是配置过程和方式都与原来的方式差不多. package com.spring.test.chap44; import org.aspectj.lang.annot

maven 添加spring/springmvc依赖项

<spring.version>4.3.18.RELEASE</spring.version> <dependencies> <!--添加spring.springmvc依赖--> <!-- aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <

Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git小结(转)

摘要 出于兴趣,想要搭建一个自己的小站点,目前正在积极的准备环境,利用Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git,这里总结下最近遇到的一些问题及解决办法,后续慢慢的继续补~ 目录[-] 一:建立一个Maven结构的Web工程 二:Spring.SpringMVC重复加载bean对象问题. 三:实现自个的数据缓存机制 2种缓存数据简介及其数据结构分析 2中缓存数据加载实现流程介绍 三:通过Spring自定义标签形式实现配置项类型数据的缓存数据结构

Idea SpringMVC+Spring+MyBatis+Maven调整【转】

Idea SpringMVC+Spring+MyBatis+Maven整合 创建项目 File-New Project 选中左侧的Maven,选中右侧上方的Create from archetype,然后选中下方列表中的webapp,然后点击Next 在GroupId和ArtifactId中填入指定内容,点击Next 直接点Next 输入项目名称,Finish Idea会自动开始下载所依赖的包,等待其完成. 项目结构 项目刚建好的时候是没有这些文件的,所以自己手动创建缺少的文件夹(包) 创建完后

[JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis)

来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral(以下博文对原博文有改动和补充) 开发环境: Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2) apache-tomcat-8.0.33 jdk1.8.0_77 MySQL 5.0.11-dev(官网下载需要账号登

springmvc+spring+mybatis+maven项目构建

1.首先在myeclipse10中安装maven的插件,将插件放入D:\Program Files (x86)\myEclipse10\MyEclipse Blue Edition 10\dropins\maven中, 2. 新建文件:maven.link填入如下内容:path=D:/Program Files (x86)/myEclipse10/MyEclipse Blue Edition 10/dropins/maven 3.重启myeclipse插件安装成功. 4.在myeclipse10

使用intellij idea搭建MAVEN+SSM(Spring+SpringMVC+MyBatis)框架

基本概念 使用SSM(Spring,SpringMVC和Mybatis) 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅限于服务器