mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
default-lazy-init="true">
<!--开启切面-->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!--扫描的包-->
<context:component-scan base-package="com.dc.Aspect" />
<context:component-scan base-package="com.dc.service,com.dc.controller,com.dc.weixin.service"/>
切面接口
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD})
@Documented
public @interface CompleteActivityTask
{
// 使用注解时需要提供的value
String taskCode();
String taskType();
}
切面的实现类
package com.dc.Aspect;
import javax.annotation.Resource;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect // 使用spring 的aop
@Component
public class CompleteActivityTaskAspect
{
@Pointcut(value = "@annotation(com.dc.Aspect.annotation.CompleteActivityTask)")
public void pointCut()
{}
/**
* 切面的实现,在方法返回以后执行
*
* @param join
* @param completeActivityTask
* @return
* @throws Throwable
*/
@AfterReturning(returning = "rvt", value = "@annotation(completeActivityTask)") // 标示遇到CompleteActivityTask这个注解的方法进行拦截
public Map<String, String> after(JoinPoint join, CompleteActivityTask completeActivityTask, Object rvt)
throws Throwable
{
// 获取到使用了注解的方法的参数
Object[] args = join.getArgs();
// 获取注解提供的value
String taskCode = completeActivityTask.taskCode();
String taskType = completeActivityTask.taskType();
// rvt 是使用了这个切面的方法的返回值
rvt;
// 执行方法
// 以下文的注解举例 taskCode == "19",taskType="1", args[0]==body,
// rvt== jsonObject
}
}
使用切面
@CompleteActivityTask(taskCode = "19", taskType = "1")
public JsonObject update(String body,HttpServletRequest request)
{
JsonObject jsonObject =new JsonObject();
return jsonObject;
}