[spring]Spring-AOP初探

问题

@[java] @[代码] @[巧妙]

Spring被誉为Java Web程序员的春天,绝非浮夸。
打开spring的源代码我们会发现他使用了大量的AOP,面向切面编程。
这一次,项目中需要用来解决前端传参的类型匹配问题,所以使用了AOP。

如果我们用Spring的拦截器的话,就会发现。request可以setAttribute但是不能setParameter,可能是为了安全考虑,Spring不允许在拦截器中对前台传过来的参数做任何改动。

可是,如果真的有这个需求怎么办呢?

解决方案

做准备

  • 导入spring-aop相关的包(百度一大把)
  • 在applicationContext中做配置,我们使用注解的方式




  • 在自动扫描的包内新建一个类,类的头上加入以下注解
@Component
@Aspect
@Order(10000) //order的值越小越优先执行

写代码

下面是类的代码(假定我们要切的是所有配置了注解RequestMapping,并且方法名是create的方法)

@Component
@Aspect
@Order(10000) //order的值越小越优先执行
public class SecurityAspect {

    @Autowired
    private HttpServletRequest request; // 简单的注入request

    @Pointcut("execution(@org.springframework.web.bind.annotation.RequestMapping * *(..))")
    public void aspect() {
    }
    
    @Around(value = "aspect() and execution(* create(..)))")
    public Object aroundCreate(ProceedingJoinPoint joinPoint) throws Throwable {
        Object[] params = joinPoint.getArgs();
        params[0] = "只是被修改的值"; // 这里我们修改了第一个参数
        return joinPoint.proceed(params);

    }
}

你可能感兴趣的:([spring]Spring-AOP初探)