aop作為spring這個輕量級的容器中很重要的一部分,得到越來越多的關注,spring的transaction就是用aop來管理的,今天就通過簡單的例子來看看spring中的aop的基本使用方法。
首先確定將要proxy的目標,在spring中預設採用jdk中的dynamic proxy,它只能夠實現介面的**,如果想對類進行**的話,需要採用cglib的proxy。顯然,選擇「程式設計到介面」是更明智的做法,下面是將要**的介面:
public inte***ce foointe***ce
以及其乙個簡單的實現:
public class fooimpl implements foointe***ce
public void dummyfoo()
}接下來建立乙個advice,在spring中支援around,before,after returning和throws四種advice,這裡就以簡單的before advice舉例:
public class printbeforeadvice implements methodbeforeadvice
}有了自己的business inte***ce和advice,剩下的就是如何去裝配它們了,首先利用proxyfactory以程式設計方式實現,如下:
public class aoptestmain
}現在執行程式,神奇的結果就出現了:
in printbeforeadvice
in fooimpl.printfoo
in printbeforeadvice
in fooimpl.dummyfoo
<?xml version="1.0" encoding="utf-8"?>
foointe***ce
myadvice
當然,main中的**也要進行相應的修改:
public static void main(string args)
現在執行一下,結果將和上面的執行結果完全一樣,這樣是不是更優雅?當需要更改實現時,只需要修改配置檔案就可以了,程式中的**不需任何改動。
<?xml version="1.0" encoding="utf-8"?>
.*print.*
foointe***ce
myadvisor
主程式不需進行任何修改,執行結果已經變樣了:
in printbeforeadvice
in fooimpl.printfoo
in fooimpl.dummyfoo
<?xml version="1.0" encoding="utf-8"?>
/web-inf/jdbc.properties$$
$$$propagation_required,readonly
propagation_required,readonly
嗯,要想徹底理解spring的aop,最好還是多看看原始碼,開源就是好啊!
spring aop和ioc運用場景
1 ioc運用場景 configuration的註解類標識這個類可以使用spring ioc容器作為bean定義的 bean註解告訴spring,乙個帶有 bean的註解方法將返回乙個物件,該物件應該被註冊為在spring應用程式上下文中的bean。configuration public clas...
spring aop 詳細介紹 方法增強
介紹 利用 spring 對方法實現增強 1.定義乙個需要增強的介面 package com.dl.code.service created with intellij idea.日期 2021 2 24 描述 spring練習 這裡面的四個方法 是等待增強的方法 public inte ce us...
4 angular框架介紹 運用
核心 只關心資料,完全不關心ui 的事 是ng 自己的一套解析程式,不完全和js 一樣 ng 和 js 表示式 不 互通 ng 變數 都是 scope 的一部分 資料初始化 ng init 名字 值 名字 值 直接寫 class 陣列 ng class arr class1 style ng ini...