xzc520

           

          Spring概念理解

          Inversion
          of 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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阜阳市| 诸暨市| 泽库县| 霞浦县| 手机| 洛隆县| 马鞍山市| 府谷县| 井陉县| 望奎县| 双牌县| 南城县| 上林县| 新龙县| 望城县| 郸城县| 宝鸡市| 贵港市| 厦门市| 澳门| 呼和浩特市| 抚远县| 锡林郭勒盟| 兖州市| 通化县| 侯马市| 安宁市| 阜宁县| 平利县| 无锡市| 从江县| 肥乡县| 大竹县| 红桥区| 全椒县| 兰考县| 都江堰市| 山东| 紫云| 密云县| 涞源县|