2、動態代理:
不用寫代理類,虛擬機器根據真實物件實現的介面產生一個類,通過類例項化一個動態代理,在例項化動態代理時將真實物件及裝備註入到動態代理中,向客戶端公開的是動態代理,當客戶端呼叫動態代理方法時,動態代理根據類的反射得到真實物件的Method,呼叫裝備的invoke方法,將動態代理、 Method、方法引數傳與裝備的invoke方法,invoke方法在喚起method方法前或後做一些處理。
1、產生動態代理的類:
java.lang.refect.Proxy
2、裝備必須實現InvocationHandler介面實現invoke方法
springAOP:
springAOP核心也是動態代理,spring採用三種方式實現代理功能。1、java的動態代理方式。2、CGlib方式。3、Aspectj方式。
預設模式
spring使用java動態代理和CGlib的混合方式提供服務,即若物件實現了介面則spring自動採用java動態代理進行支援,否則則採用CGlib方式進行支援;也可以強制制定使用cglib方式代理,在配置檔案中進行配置。(http://my.oschina.net/coldlemon/blog/178586)