Spring概念理解
Inversionof Control Containers(IOC)由容器來控制程序間的關系,而非程序來控制,就是所謂的容器控制反轉。
Dependency Injection 容器動態的將某種動態關系注入到主鍵當中。
依賴注入的幾種實現
???type1 接口注入
????????????public class ClassA {
??????????????????private InterfaceB clzB;
??????????????????public doSomething() {
????????????????????????Ojbect obj =
??????????????????????????????Class.forName(Config.BImplementation).newInstance();
?????????????????????????clzB = (InterfaceB)obj;
?????????????????????????clzB.doIt()
??????????????????}
????????????……
????????????}
???我們通過配置文件動態的加載類,然后強制轉換成相應的類來實現動態注入,對于IOC容器來說加載類的過程由容器來完成。
web容器采用type1 接口注入的具體應用
public class MyServlet extends HttpServlet {
public void doGet(
?????????HttpServletRequest request,
?????????HttpServletResponse response)
????????????throws ServletException, IOException {
??????……
???}
}
Type2 設值注入? 它由容器通過Setter方法完成依賴關系的設置
Type3構造了注入?
public class DIByConstructor {
???private final DataSource dataSource;
???private final String message;
???public DIByConstructor(DataSource ds, String msg) {
??????this.dataSource = ds;
??????this.message = msg;
???}
???……
}
Bean Wrapper
???? 由容器將依賴關系注入到組件當中,在運行期間由spring根據配置文件,將其它對象的引用通過組件提供的setter方法進行設定。運行期間動態生成對象并設定它對依賴關系.
Object obj = Class.forName("net.xiaxin.beans.User").newInstance();
BeanWrapper bw = new BeanWrapperImpl(obj);
bw.setPropertyValue("name", "Erica");
System.out.println("User name=>"+bw.getPropertyValue("name"));
Bean Factory
? 創建并且維護Bean實例它可以配置
??????1.? Bean的屬性值及其依賴關系(即對其它Bean的引用)
??????2.? Bean的創建模式(是否單例模式)
??????3.? Bean的初始化和銷毀方法
??????4.? Bean的依賴關系
ApplicationContext
??????覆蓋了BeanFactory所有的方法,而且提供了新的功能。它有以下擴展功能
???1.國際化的支持
???2.資源訪問
???3.事件傳播
???4.多實例加載
??? spring提供了可配置的ApplicationContext加載機制。加載器有兩種選擇:ContextLoaderListener或ContextLoaderServlet一個利用servlet2.3的Listener接口實現而另一個則利用Servlet接口實現。
在web.xml中加入
????????????<listener>
???????????????<listener-class>
??????????????????org.springframework.web.context.ContextLoaderListener
???????????? ?</listener-class>
?????????? </listener>
或者:
?????????<servlet>
????????????<servlet-name>context</servlet-name>
????????????<servlet-class>
??????????????????org.springframework.web.context.ContextLoaderServlet
????????????</servlet-class>
????????????<load-on-startup>1</load-on-startup>
?????????</servlet>
Web容器會自動加載WEB-INF/applicationContext.xml初始化ApplicationContext實例.如果你指定配置文件就可以通過context-param指定:
??????<context-param>
?????????<param-name>contextConfigLocation</param-name>
?????????<param-value>/WEB-INF/myApplicationContext.xml</param-value>
??????</context-param>
配置完成后就可以通過WebApplicationContextUtils.getWebApplicationContext方法在Web應用中獲取ApplicationContext的引用.
posted on 2006-10-16 23:50 嫁蛙 閱讀(456) 評論(0) 編輯 收藏 所屬分類: hiberante&spring