<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    OMG,到底在尋找什么..................
    (構造一個完美的J2EE系統(tǒng)所需要的完整知識體系)
    posts - 198,  comments - 37,  trackbacks - 0

    原貼地址:http://blog.csdn.net/hongxing4hao/archive/2007/02/16/1511248.aspx

    一、    IoC(Inversion of control): 控制反轉

    1、IoC:

    概念:控制權由對象本身轉向容器;由容器根據(jù)配置文件去創(chuàng)建實例并創(chuàng)建各個實例之間的依賴關系

    核心:bean工廠;在Spring中,bean工廠創(chuàng)建的各個實例稱作bean

    2、bean工廠創(chuàng)建bean的三種方式:

    u      通過構造方法直接創(chuàng)建:

    <bean id=”” class=”bean class name”>

    u      通過靜態(tài)工廠方法創(chuàng)建:

    <bean id=”” class=”factory class name” factory-method=””>

    u      通過非靜態(tài)工廠方法創(chuàng)建:

    <bean id=”factory” class=”factory class name”>

    <bean id=”” factory-bean=” factory” factory-method=””>

    3、Spring中實現(xiàn)IoC的方式:依賴注入(Dependency Injection)

    Spring中依賴注入的兩種方式:

    u      通過setter方法注入:

    <property name=””></property>

    其中,name屬性的取值依setter方法名而定

    u      通過構造方法注入:

    <constructor-arg index=””></ constructor-arg>

    其中,index表示構造方法中的參數(shù)索引(第一個參數(shù)索引為0)

    4、設置屬性時可選的標簽:

    n        value:基本類型(封裝類型)或String類型

    n        ref:引用工廠中其它的bean

    n        list:List或數(shù)組類型

    n        set:Set類型

    n        map:Map類型

    n        props:Properties類型

    5、自動裝配:自動將某個bean 注入到另一個bean的屬性當中

    (bean標簽的autowire屬性)

    6、依賴檢查:檢查bean的屬性是否完成依賴關系的注入

    (bean標簽的dependency-check屬性)

    7、生命周期方法:

                  init-method(也可實現(xiàn)接口org.springframework.beans.factory.InitializingBean)

    destroy-method(也可實現(xiàn)接口DisposableBean)

           8、單例bean:默認情況下,從bean工廠所取得的實例為Singleton

                                       (bean的singleton屬性)

           9、Aware相關接口:可以通過實現(xiàn)Aware接口來獲得Spring所提供的資源

    l        org.springframework.beans.factory.BeanNameAware

    l        org.springframework.beans.factory.BeanFactoryAware

    l        org.springframework.context.ApplicationContextAware

    10、ApplicationContext的功能擴展:

    1)BeanPostProcessor:若想在Spring對bean完成依賴注入之后,再補充一些后續(xù)操作,則可以定義一個bean類來實現(xiàn)接口:org.springframework.beans.factory.config.BeanPostProcessor,然后在配置文件中定義該bean類;從而Spring容器會在每一個bean被初始化之前、之后分別執(zhí)行實現(xiàn)了該接口的bean類的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法;

                  2)BeanFactoryPostProcessor:

    l        CustomEditorConfigurer:可借助實現(xiàn)了接口java.beans.PropertyEditor的類,并依據(jù)當中的實現(xiàn),將字符串類型轉換為指定類型的對象;

    l        PropertyPlaceholderConfigurer:可將配置文件中屬性值用“${key}”形式表示,則會將其值替換成指定的屬性文件中key所對應的value;

    l        PropertyOverrideConfigurer:可借助該類在指定的屬性文件中設定一些優(yōu)先的屬性(將忽略配置文件中對應屬性的設定值);

    (注意:屬性文件中設定屬性值的格式為:beanName.propertyName=value)

    3) 國際化消息的支持:可通過ApplicationContext的getMessage()方法獲得指定資源文件中的消息;配置如下:

    <bean

    id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">

        <property name="basename">

          <value>first/msg</value>

        </property >

      </bean>

    4) 事件的支持:

           可發(fā)布的事件:ApplicationEvent

           發(fā)布事件的方法:publishEvent(ApplicationEvent)

           事件監(jiān)聽接口:ApplicationListener

           11、ApplicationContext管理bean的執(zhí)行階段:

    l        創(chuàng)建bean;

    l        屬性注入(依賴關系的注入);

    l        BeanNameAware接口實現(xiàn)類的setBeanName()方法;

    l        BeanFactoryAware接口實現(xiàn)類的setBeanFactory()方法;

    l        ApplicationContextAware接口實現(xiàn)類的setApplicationContext()方法;

    l        BeanPostProcessor接口實現(xiàn)類中的postProcessBeforeInitialization()方法;

    l        InitializingBean接口實現(xiàn)類的afterPropertiesSet()方法;

    l        Bean定義文件中init-method屬性所指定的方法;

    l        BeanPostProcessor接口實現(xiàn)類中的postProcessAfterInitialization()方法;

           12、FactoryBean:用來創(chuàng)建bean

            <bean id="myObject"

                  class="org.springframework.beans.factory.config.

                   MethodInvokingFactoryBean">

              <property name="staticMethod">

                <value>com.whatever.MyClassFactory.getInstance</value>

              </property>

    </bean>

    (注意:通過bean工廠的getBean(“myObject”)得到的是FactoryBean所生產的產品;getBean(“&myObject”)得到的是FactoryBean實例本身)

    二、AOP(Aspect-Oriented Programming): 面向方面編程

    1、代理的兩種方式:

    靜態(tài)代理:

    l        針對每個具體類分別編寫代理類;

    l        針對一個接口編寫一個代理類;

    動態(tài)代理:

    針對一個方面編寫一個InvocationHandler,然后借用JDK反射包中的Proxy類為各種接口動態(tài)生成相應的代理類

    2、AOP的主要原理:動態(tài)代理

    3、AOP中的術語:

    l        Aspect:方面,層面

    l        Joinpoint:結合點、聯(lián)結點;加入業(yè)務流程的點或時機

    l        Pointcut:切入點、作用點;指定某個方面在哪些聯(lián)結點織入到應用程序中

    l        Advice:通知、行為;某個方面的具體實現(xiàn)

    l        Advisor:由Pointcut和Advice共同構成

    4、Pointcut:Spring根據(jù)類名稱及方法名稱定義Pointcut,表示Advice織入至應用程序的時機;

    org.springframework.aop.Pointcut

    5、ProxyFactoryBean:用來創(chuàng)建代理對象

    <bean id="proxy"

    class="org.springframework.aop.framework.ProxyFactoryBean">

        <property name="target">

             <ref bean="target bean"/>

        </property>

        <property name="proxyInterfaces">

             <list>

    <value>interfaces of target bean implemented</value>

    </list>

        </property>

        <property name="interceptorNames">

               <list>

                  <value>Advice/Advisor bean</value>

             </list>

        </property>

    </bean>

    創(chuàng)建代理對象需指定的三要素:

    l        target:設定目標對象(只能是一個);

    l         proxyInterfaces:設定代理接口(目標對象所實現(xiàn)的接口);

    l        interceptorNames:設定攔截器的名字(各個advice或advisor bean的列表)

    6、Advice:五種(根據(jù)織入的時機不同而劃分)

    l        Before Advice:在目標對象的方法執(zhí)行之前加入行為;

    要實現(xiàn)的接口:org.springframework.aop.MethodBeforeAdvice

    l        After Advice:在目標對象的方法執(zhí)行之后加入行為;

    要實現(xiàn)的接口:org.springframework.aop.AfterReturningAdvice

    l        Throw Advice:在目標對象的方法發(fā)生異常時加入行為

    要實現(xiàn)的接口:org.springframework.aop.ThrowsAdvice

    l        Around Advice:在目標對象的方法執(zhí)行前后加入行為

    要實現(xiàn)的接口:org.aopalliance.intercept.MethodInterceptor

    l        Introduction Advice:引入的行為(增加了可操作的方法)

    1.        聲明要添加的功能接口;

    2.        創(chuàng)建引入Advice;

    (繼承org.springframework.aop.support.DelegatingIntroductionInterceptor,并實現(xiàn)添加的功能接口)

    3.        在配置文件中定義一個DefaultIntroductionAdvisor的bean

    (需要兩個構造方法的參數(shù):Advice和添加的功能接口)

    7、PointcutAdvisor:Pointcut定義了Advice的應用時機;在Spring中,使用PointcutAdvisor將Pointcut和Advice結合為一個對象

    l         NameMatchMethodPointcutAdvisor:可用來指定Advice所要應用的目標對象上的方法名稱

    <bean id="nameAdvisor"

    class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">

        <property name="mappedName">

          <value>do*</value>

        </property>

        <property name="advice">

          <ref local="AdviceBeanName"/>

        </property>

    </bean>

    l         RegexpMethodPointcutAdvisor:可使用Regular expression定義Pointcut,在符合Regular expression的情況下應用Advice,其pattern屬性用來指定所要符合的完整類名(包括 package名稱)及方法名;定義該屬性時可使用的符號包括:

    符號
     

    描述

    .
     

    符合任意一個字符

    +
     

    符合前一個字符一次或多次

    *
     

    符合前一個字符零次或多次

    \
     

    轉義字符,用來轉義正則表達式中使用到的字符

           <bean id="regexpAdvisor"

    class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">

              <property name="pattern">

                   <value>.*do.*</value>

              </property>

              <property name="advice">

                   <ref local="AdviceBeanName"/>

              </property>

         </bean>

    8、AutoProxy:自動代理

    l        BeanNameAutoProxyCreator:根據(jù)bean的名字為其自動創(chuàng)建代理對象,bean工廠自動返回其代理對象:

    <bean

    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">

    <property name="beanNames">

    <list>

            <value>beanName</value>

    </list>

    </property>

    <property name="interceptorNames">

    <list>

    <value>Advice/Advisor Bean Name</value>

                                </list>

    </property>

    </bean>

    l        DefaultAdvisorAutoProxyCreator:自動將Advisor應用到符合Pointcut的目標對象上

    <bean id="regexpAdvisor"

    class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">

        <property name="pattern">

          <value>.*do.*</value>

        </property>

        <property name="advice"><ref local="AdviceName"/></property>

    </bean>

    <bean

    class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

    三、Spring的Web MVC:

           1、DispatcherServlet:作為前端控制器,負責分發(fā)客戶的請求到Controller;

                  在web.xml中的配置如下:

           <servlet>

          <servlet-name>mvc</servlet-name>

          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

             <init-param>

              <param-name>contextConfigLocation</param-name>

              <param-value>/WEB-INF/mvc-servlet.xml</param-value>

          </init-param>

          <load-on-startup>1</load-on-startup>

          </servlet>

          <servlet-mapping>

          <servlet-name>mvc</servlet-name>

          <url-pattern>*.do</url-pattern>

          </servlet-mapping>

           2、Controller:負責處理客戶請求,并返回ModelAndView實例;

    Controller必須實現(xiàn)接口org.springframework.web.servlet.mvc.Controller,實現(xiàn)該接口中的方法handleRequest(),在該方法中處理請求,并返回ModelAndView實例

    3、HandlerMapping:DispatcherServlet根據(jù)它來決定請求由哪一個Controller處理;

    l         默認情況下,DispatcherServlet將使用org.springframework.web.servlet.handler. BeanNameUrlHandlerMapping,即使用和客戶請求的URL名稱一致的Controller的bean實例來處理請求;

    l         另外一種常用的HandlerMapping為org.springframework.web.servlet.handler. SimpleUrlHandlerMapping,配置如下:

    <bean

    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

        <property name="mappings">

          <props>

            <prop key="/add.do">add</prop>

          </props>

        </property>

    </bean>

    在以上“mappings”屬性設置中,“key”為請求的URL,而“value”為處理請求的Controller的bean名稱

    4、ModelAndView:用來封裝View與呈現(xiàn)在View中的Model對象;

    DispatcherServlet根據(jù)它來解析View名稱,并處理呈現(xiàn)在View中的Model對象

           5、ViewResolver:DispatcherServlet委托ViewResolver來解析View名稱;

                  常用的ViewResolver實例配置如下:

           <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

               <property name="prefix">

                     <value>/</value>

               </property>

                <property name="suffix">

                      <value>.jsp</value>

               </property>

          </bean>

    四、Spring Data Access

           1、Template

           2、Dao Support

           3、Transaction Manager

           4、Transaction Proxy

    posted on 2007-04-17 10:58 OMG 閱讀(2968) 評論(3)  編輯  收藏 所屬分類: Spring

    FeedBack:
    # re: Spring核心總結
    2014-06-18 22:50 | zuidaima
    # re: Spring核心總結[未登錄]
    2014-07-25 18:12 | gaga
    haha  回復  更多評論
      
    # re: Spring核心總結[未登錄]
    2014-07-25 18:13 | gaga
    asdf  回復  更多評論
      

    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風云人物

    文檔

    朋友

    相冊

    經(jīng)典網(wǎng)站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费一区二区三区| 福利免费观看午夜体检区| 亚洲欧洲日产国产综合网| 免费精品国偷自产在线在线| 国产亚洲综合久久| 欧洲亚洲国产清在高| 影音先锋在线免费观看| 野花香高清在线观看视频播放免费| 亚洲精品线在线观看| 国产公开免费人成视频 | 99久久久国产精品免费牛牛| 亚洲中文字幕无码mv| 亚洲日韩av无码| 天天拍拍天天爽免费视频 | 日韩电影免费在线| 在线看片免费人成视久网| 老司机福利在线免费观看| 亚洲天堂一区在线| 亚洲区小说区激情区图片区| 成人黄软件网18免费下载成人黄18免费视频| 黄色网址免费在线| 精品丝袜国产自在线拍亚洲| 亚洲av福利无码无一区二区| 亚洲精品视频免费| 免费鲁丝片一级在线观看| 免费精品国产日韩热久久| 免费国产黄网站在线观看可以下载| 又黄又大的激情视频在线观看免费视频社区在线 | 在线aⅴ亚洲中文字幕| 亚洲视频一区在线播放| 久久青青草原亚洲AV无码麻豆| 亚洲日韩国产精品乱| 亚洲综合精品网站| 亚洲午夜未满十八勿入网站2| 亚洲国产精品无码久久九九| 免费一级毛片正在播放| 免费a级毛片大学生免费观看 | 亚洲福利秒拍一区二区| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲人成色777777在线观看| 亚洲国产精品成人精品无码区 |