服务端第三次课程:面向切面编程AOP
生活随笔
收集整理的這篇文章主要介紹了
服务端第三次课程:面向切面编程AOP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
3:面向切面編程AOP
1:回顧
-
bean的組裝方式
- 規劃的裝配 component autowired sacn是在configuration底下的
- Java config 使用configuration
- 函數調用,方法調用(調用加了bean方法的)
- bean方法的參數,相當于auto wired
- XML配置
-
profile 可以幫我們干什么?加載方法上面還是類上面很重要的東西
- 指定要創建那些bean,系統有很多的bean,不同的環境是不一樣的
- 開發,生產,測試
- 指定要創建那些bean,系統有很多的bean,不同的環境是不一樣的
-
conditionlal 條件話的創建注解
- @bean
- @conditional
-
@qualifier
-
bean 的作用域
- 默認是singleton ,一個實例
- prototype get一個bean 的時候,就給你一個
- session 多次的交互 ,spring維持一個session的bean
- request
2:編程方法
- POP,最小的單元是函數
- OOP,最小的單元是類
- AOP,
- FP,函數式編程:多核技術的發展
- Rx,反應式編程:
3:AOP
1:引導
-
日志在
-
認證:鑒別一個人的身份
-
授權:登錄之后,看有沒有權力
- 你要登機,你需要出示你的身份證和機票,身份證是為了證明你張三確實是你張三,這就是 authentication;而機票是為了證明你張三確實買了票可以上飛機,這就是 authorization。
-
把我們系統當中的,通用的邏輯抽取出來,與具體的業務邏輯隔離開,運行
2:繼承和委托
- 在音樂會之前需要做一些事情
- 在音樂會之后需要做一些事情
- 創建一個對象,對象注入到concert,然后調用觀眾的方法,進行前后的事情
3:橫切關注點
-
關注的事務
- 日志
- 安全
- 事務
- 緩存
-
advice 通知
- 關閉手機 + before
- 切面做什么,以及什么時候做
-
poincut 切點
- 在哪里做
- perform方法
- 切點表達式 execution(* concert.performance.perform(…))
- 兩個點表示參數,不關心參數是一個還是兩個,還是多個
-
切面
-
這個類同統稱為 一個切面(aspect)
-
定義方式
-
注解的方法
-
do not repeat yourself
-
代碼和注釋不要重復
- 難以維護
-
-
XML的方式
-
-
-
連接點
-
引入
- 引入新功能
- introduction
-
織入
- 織入時機
- 編譯器,用特殊的語法來寫切面,和正常的代碼編譯在一起
- 類加載期,加載的時候,
- 運行期,spring只支持代理
4:通知的類型
- before
- 同一個類的aspect,定義了兩個相同的advice,定義兩個before
- 那么這兩個的執行順序是無法確定的,哪怕你規定了order數值,也不行
- after
- afterreturning
- afterthrowing
- around
- 我拿到的時候一個proxy的引用,在適當的實際調用
5:切點指示器
- with 是包路徑的限定,只在這些包地下
- bean 針對某一個具體的bean,來實施制圖
4:問題
- 我如果要織入多個,這個實例到底是一個多實例,還是一個多實例
- defaultEncoreable這個類我沒有實例化,當我現在實現多個接口的對象,如果有三個,那么有三個都會增加新的行
- 這個defaultEncoreable 是單實例還是???
3:XML
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><aop:aspectj-autoproxy/><bean id="audience" class="concert2.Audience"/><bean id="concert" class="concert.Concert"/><aop:config><aop:aspect ref="audience"><aop:before method="silenceCellPhones"pointcut="execution(* concert.Performance.perform(..))"/><aop:before method="takeSeats"pointcut="execution(* concert.Performance.perform(..))"/><aop:after method="applause"pointcut="execution(* concert.Performance.perform(..))"/><aop:after-throwing method="demandRefund"pointcut="execution(* concert.Performance.perform(..))"/></aop:aspect></aop:config> </beans> 注入的時候,沒有這個屬性 委托這個屬性 我們可以自己實例化,然后給引用<!-- delegate-ref="encoreableDelegate"/>-->總結
以上是生活随笔為你收集整理的服务端第三次课程:面向切面编程AOP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 知识整理(待续)
- 下一篇: AVL,B,B+,红黑