Spring特定方法拦截(切面法)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cg_Amaz1ng/article/details/85166742

使用Spring的情况下要对某个类的某个方法拦截,有两种方案。

1、使用监听器

2、使用拦截器

使用监听器比较复杂,还需要自己设计事件和事件发布器。因此我更偏向于使用拦截器,下面将介绍如何使用Spring的切面来实现特定方法拦截。

直接上代码(这段代码是和Elastic-Job联动,意思是在Elastic-Job的任务执行execute方法之前,先给一个Bean——JobProcessor赋值)


import java.util.Map;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.gaara.job.batch.JobProcessor;

@Aspect
@Component
public class ExecuteAspect
{
    
    @Autowired
    private JobProcessor jobProcessor;
    
    @Pointcut("execution (public * com.gaara.job.*.execute(com.dangdang.ddframe.job.api.ShardingContext) )")
    public void webPointCut(){}
    
    /**
     * 将Job自定义参数 按分片参数所对应的key值存入JobProcessor对应批量TaskUnit的jobParam中
     * key值取自Elastic-Job的分片参数
     * value值取自Elastic-Job的自定义参数
     * @param joinPoint
     * @throws Throwable
     */
    @Before("webPointCut()")
    public void deBefore(JoinPoint joinPoint) throws Throwable {
        Object[] args = joinPoint.getArgs();
        ShardingContext shardingContext = (ShardingContext) args[0];
        Map<String,String> jobParamMap = jobProcessor.getJobParamMap();
        if (jobParamMap != null && !StringUtils.isEmpty( shardingContext.getShardingParameter() )) {
            jobParamMap.put( shardingContext.getShardingParameter(), shardingContext.getJobParameter() );
        } 
    }
}

@Aspect  声明这是一个有切面功能的类

@Component 将其交给Spring容器管理

@Pointcut 切面,该注解所标注的方法代表了触发条件

execution (public * com.gaara.job.*.execute(com.dangdang.ddframe.job.api.ShardingContext) ) 切面表达式,意思是触发条件是当执行com.gaara.job下任意一个类的以ShardingContext为参数的execute方法时

@Before 即在切面发生之前先执行

JoinPoint 连接点,通俗一点就是切面的上下文,包含了切面的类,方法和参数等信息

猜你喜欢

转载自blog.csdn.net/cg_Amaz1ng/article/details/85166742