aop思想介绍
咱們看一下Spring的AOP,Spring提供了對AOP,回顧之前接觸過的AOP,Spring到底提供了什么樣的支持,能夠幫助我們進行AOP的開發,第一個說一下AOP的思想,AOP思想前端時間已經說過了,用最簡單的話來說,橫向重復,縱向抽取,就是這八個字,畫AOP圖的話,因為AOP是思想,解決參數亂碼,request.setCharacterEncoding,那代碼天天在Service里面寫,寫一份寫一份,直到有一天,filter出現了,咱們說filter是在請求到達servlet之前,先會經過什么呢,filter,這樣的話就意味著我們把解決亂碼這個事,放到filter當中來的話,那servlet種解決亂碼的代碼干掉了,是不是這個意思,這樣的話從系統架構圖來說,filter解決亂碼這個事,是不是等于,加入到所有servlet這個類上了,這樣的話抽取到filter上,相當于給所有類都加了,這樣切面于是就形成了,你看這個filter是不是就像刀一樣,這是不是就是面向切面編程,理解切面編程的概念吧
所以那把刀,他還切過誰,還切過啥呢,就是你們在學動態代理的時候,誰能給我舉個例子,比如系統里面有XxxService,動態代理當中,在Service當中,管理事務,包括現在好像也是這么做的,你別管寫增刪改查啥方法,是不是要開啟事務,寫業務邏輯,然后提交事務,那這樣的話,咱們使用動態代理記錄,能夠解決什么問題呢,咱們是不是要搞一個代理類,實現的話是不是有一個Invocation Handler,在InvocationHandler里面,把事務管理的代碼提取進來,然后使用動態代理技術,把Handler動態加到所有的Service,形成代理對象,動態代理是這么寫的吧,當時舉個例子,當時可能不是事務管理代碼,Proxy.newProxyInstance,第一個參數ClassLoader,第二個參數是傳一個Interface,是不是數組,第三個是傳InvocationHandler,是寫的這玩意吧,哪怕你寫出來不知道咋用,你先寫出來,那InvocationHandler要寫的東西就是咱們加在被代碼對象中的代碼,這點應該還記得吧,咱們希望加到被代理對象中的代碼,就寫到Handler里面,是不是理解成把,如果是對Service生成代理的話,咱們的事務管理抽取到InvocationHandler里,這樣的話,咱們通過動態代理,把事務管理加到各個Service當中,是不是不需要在Service當中再寫了
按照時間順序,這是我們第二次接觸AOP,第三次接觸AOP是在什么時候,攔截器的,攔截器的Action,然后在咱們的Action當中,攔截器那么多,隨便找一個,參數賦值,參數賦值,實際上理論上來講,參數賦值的話,每個Action用參數賦值,那你是不是要把參數賦值的代碼放到攔截器當中,但是咱們的Action好像不用這么干就可以接收到參數,這是為啥啊,為啥,是不是咱們有一個攔截器,這個攔截器就可以賦值參數的動作,如果在攔截器中,如果做這個事,那這樣的話是不是意味著在Action中就不用再做了,包括后面寫的校驗是否登陸這個事,是不是這樣,咱們如果沒有攔截器的話,是不是都要校驗一下,還有攔截器之后,放到攔截器中來做,是不是就抽取出來了,這就是咱們的AOP思想
?
總結
- 上一篇: spring整合junit测试
- 下一篇: aop实现原理-动态代理CGLib代理