[spring]Spring-AOP初探

問題

@[java] @[代碼] @[巧妙]

Spring被譽(yù)為Java Web程序員的春天,絕非浮夸。
打開spring的源代碼我們會發(fā)現(xiàn)他使用了大量的AOP,面向切面編程。
這一次,項(xiàng)目中需要用來解決前端傳參的類型匹配問題,所以使用了AOP。

如果我們用Spring的攔截器的話,就會發(fā)現(xiàn)。request可以setAttribute但是不能setParameter,可能是為了安全考慮,Spring不允許在攔截器中對前臺傳過來的參數(shù)做任何改動。

可是,如果真的有這個需求怎么辦呢?

解決方案

做準(zhǔn)備

  • 導(dǎo)入spring-aop相關(guān)的包(百度一大把)
  • 在applicationContext中做配置,我們使用注解的方式
<!-- 配置自動掃描的包 -->
<context:component-scan base-package="com.xxx" />
<!-- 激活自動代理功能 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
  • 在自動掃描的包內(nèi)新建一個類,類的頭上加入以下注解
@Component
@Aspect
@Order(10000) //order的值越小越優(yōu)先執(zhí)行

寫代碼

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

@Component
@Aspect
@Order(10000) //order的值越小越優(yōu)先執(zhí)行
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] = "只是被修改的值"; // 這里我們修改了第一個參數(shù)
        return joinPoint.proceed(params);

    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,555評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,273評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,039評論 25 709
  • 藍(lán)泡兒和整個女生宿舍的姑娘都合不來,舉例來說,你知道藍(lán)泡兒這么難聽的名字咋來的嘛?她自己取的,生怕別人知道她的大名...
    劉小送閱讀 269評論 0 0
  • 別小看這些生活里的距離,有多少情感都最終敗在距離上。遠(yuǎn)了生出不滿,近了又生出矛盾。
    先生百年閱讀 292評論 0 0

友情鏈接更多精彩內(nèi)容