[spring]Spring-AOP初探

问题

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

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

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

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

解决方案

做准备

  • 导入spring-aop相关的包(百度一大把)
  • 在applicationContext中做配置,我们使用注解的方式
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.xxx" />
<!-- 激活自动代理功能 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
  • 在自动扫描的包内新建一个类,类的头上加入以下注解
@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 Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,001评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,974评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,637评论 25 708
  • 蓝泡儿和整个女生宿舍的姑娘都合不来,举例来说,你知道蓝泡儿这么难听的名字咋来的嘛?她自己取的,生怕别人知道她的大名...
    刘小送阅读 252评论 0 0
  • 别小看这些生活里的距离,有多少情感都最终败在距离上。远了生出不满,近了又生出矛盾。
    先生百年阅读 273评论 0 0