Posted on 2009-02-16 19:51
啥都寫點 閱讀(343)
評論(0) 編輯 收藏 所屬分類:
J2EE
Aware相關接口,表示在Spring實例化Bean之前進行相關的調用
例如:準備工作-->打掃工作
BeanNameAware表示在Spring實例化Bean之前進行調用
ApplicationContextAware: 在Bean類被初始化之后,將會被注入ApplicationContext實例
//ApplicationContext實例由系統自動添加上去
public void setApplicationContext (ApplicationContext
arg0) throws BeansException {
}
消息支持
ApplicationContext繼承了MessageSource接口,用戶可以直接使用
事件監聽:
容器關閉
容器初始化
在Web中請求處理的時候
CGLIB
spring對AOP的支持
Asepect默認情況下不用實現接口,但對于目標對象(UserManagerImpl.java),在默認情況下必須實現接口,如果沒有實現接口必須引入CGLIB庫
我們可以通過Advice中添加一個JoinPoint參數,這個值會由spring自動傳入,從JoinPoint中可以取得參數值、方法名等等。
1、 如果目標對象實現了接口,默認情況下會采用JDK的動態代理實現AOP
2、 如果目標對象實現了接口,可以強制使用CGLIB實現AOP
3、 如果目標對象沒有實現接口,必須采用CGLIB庫,spring會自動在JDK動態代理和CGLIB之間轉換
à如何強制使用CGLIB實現AOP?
*添加CGLIB庫,SPRING_HOME/cglib/*.jar
*在 spring配置文件中加入<aop:aspect-autoproxy
proxy-target-class=”true”/>
JDK動態代理和CGLIB字節碼生成的區別?
*JDK動態代理只能對實現了接口的類生成代理,而不能針對類
*CGLIB是針對實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法
因為是繼承,所以該類或方法最好不要聲明成final
--
學海無涯