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 嫁蛙 閱讀(455) 評論(0)  編輯  收藏 所屬分類: hiberante&spring


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阿尔山市| 黑河市| 东辽县| 醴陵市| 金寨县| 达日县| 田林县| 瓦房店市| 清镇市| 乌鲁木齐县| 蒙自县| 遂川县| 四川省| 筠连县| 晴隆县| 桃源县| 上蔡县| 开封县| 依兰县| 铜鼓县| 海城市| 伊金霍洛旗| 长春市| 武功县| 固始县| 彭水| 阿瓦提县| 称多县| 大余县| 渭源县| 增城市| 关岭| 南城县| 灵台县| 武平县| 临沧市| 将乐县| 遂溪县| 岗巴县| 灵台县| 南华县|