AOP(面向方面)的思想,就是把項目共同的那部分功能分離開來,比如日志記錄,避免在業務邏輯裡面夾雜着跟業務邏輯無關的代碼。
下面是一個AOP實作的簡單例子:

首先定義一些業務方法:
實作InvocationHandler接口,使用map來存儲不同的InvocationHandler對象,避免生成過多。
然後編寫一個Test類測試:
以後需要添加新的業務邏輯XXXService,隻需要調用
XXXService xs = LogInvoHandler.getProxyInstance(XXXServiceImpl.class);
即可。
也可以模仿Spring等架構的配置,把bean的類名配置在xml檔案中,如:
<bean id="bussinessService" class="com.wangjie.aoptest2.service.impl.BussinessServiceImpl">
然後在java代碼中解析xml,通過Class.forName("com.wangjie.aoptest2.service.impl.BussinessServiceImpl");獲得Class對象
然後通過LogInvoHandler.getProxyInstance(Class.forName("com.wangjie.aoptest2.service.impl.BussinessServiceImpl"));獲得代理對象Proxy
再使用反射去調用代理對象的方法。
運作結果如下:
九月 24, 2013 11:08:03 上午 com.wangjie.aoptest2.invohandler.LogInvoHandler invoke
INFO: ____invoke method: login; args: [zhangsan, 123456]; return: login success
INFO: ____invoke method: find; args: null; return: find success
九月 24, 2013 11:08:03 上午 com.wangjie.aoptest2.Test main
INFO: --------------------------------------
INFO: ____invoke method: work; args: null; return: work success
INFO: ____invoke method: sleep; args: null; return: sleep success
INFO: ____invoke method: login; args: [lisi, 654321]; return: login success