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

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

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

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

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

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

    1、IoC:

    概念:控制權(quán)由對(duì)象本身轉(zhuǎn)向容器;由容器根據(jù)配置文件去創(chuàng)建實(shí)例并創(chuàng)建各個(gè)實(shí)例之間的依賴關(guān)系

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

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

    u      通過構(gò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中實(shí)現(xiàn)IoC的方式:依賴注入(Dependency Injection)

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

    u      通過setter方法注入:

    <property name=””></property>

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

    u      通過構(gòu)造方法注入:

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

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

    4、設(shè)置屬性時(shí)可選的標(biāo)簽:

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

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

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

    n        set:Set類型

    n        map:Map類型

    n        props:Properties類型

    5、自動(dòng)裝配:自動(dòng)將某個(gè)bean 注入到另一個(gè)bean的屬性當(dāng)中

    (bean標(biāo)簽的autowire屬性)

    6、依賴檢查:檢查bean的屬性是否完成依賴關(guān)系的注入

    (bean標(biāo)簽的dependency-check屬性)

    7、生命周期方法:

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

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

           8、單例bean:默認(rèn)情況下,從bean工廠所取得的實(shí)例為Singleton

                                       (bean的singleton屬性)

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

    l        org.springframework.beans.factory.BeanNameAware

    l        org.springframework.beans.factory.BeanFactoryAware

    l        org.springframework.context.ApplicationContextAware

    10、ApplicationContext的功能擴(kuò)展:

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

                  2)BeanFactoryPostProcessor:

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

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

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

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

    3) 國(guó)際化消息的支持:可通過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        屬性注入(依賴關(guān)系的注入);

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

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

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

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

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

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

    l        BeanPostProcessor接口實(shí)現(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所生產(chǎn)的產(chǎn)品;getBean(“&myObject”)得到的是FactoryBean實(shí)例本身)

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

    1、代理的兩種方式:

    靜態(tài)代理:

    l        針對(duì)每個(gè)具體類分別編寫代理類;

    l        針對(duì)一個(gè)接口編寫一個(gè)代理類;

    動(dòng)態(tài)代理:

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

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

    3、AOP中的術(shù)語(yǔ):

    l        Aspect:方面,層面

    l        Joinpoint:結(jié)合點(diǎn)、聯(lián)結(jié)點(diǎn);加入業(yè)務(wù)流程的點(diǎn)或時(shí)機(jī)

    l        Pointcut:切入點(diǎn)、作用點(diǎn);指定某個(gè)方面在哪些聯(lián)結(jié)點(diǎn)織入到應(yīng)用程序中

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

    l        Advisor:由Pointcut和Advice共同構(gòu)成

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

    org.springframework.aop.Pointcut

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

    <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)建代理對(duì)象需指定的三要素:

    l        target:設(shè)定目標(biāo)對(duì)象(只能是一個(gè));

    l         proxyInterfaces:設(shè)定代理接口(目標(biāo)對(duì)象所實(shí)現(xiàn)的接口);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    3.        在配置文件中定義一個(gè)DefaultIntroductionAdvisor的bean

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

    7、PointcutAdvisor:Pointcut定義了Advice的應(yīng)用時(shí)機(jī);在Spring中,使用PointcutAdvisor將Pointcut和Advice結(jié)合為一個(gè)對(duì)象

    l         NameMatchMethodPointcutAdvisor:可用來指定Advice所要應(yīng)用的目標(biāo)對(duì)象上的方法名稱

    <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的情況下應(yīng)用Advice,其pattern屬性用來指定所要符合的完整類名(包括 package名稱)及方法名;定義該屬性時(shí)可使用的符號(hào)包括:

    符號(hào)
     

    描述

    .
     

    符合任意一個(gè)字符

    +
     

    符合前一個(gè)字符一次或多次

    *
     

    符合前一個(gè)字符零次或多次

    \
     

    轉(zhuǎn)義字符,用來轉(zhuǎn)義正則表達(dá)式中使用到的字符

           <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:自動(dòng)代理

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

    <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:自動(dòng)將Advisor應(yīng)用到符合Pointcut的目標(biāo)對(duì)象上

    <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ù)責(zé)分發(fā)客戶的請(qǐng)求到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:負(fù)責(zé)處理客戶請(qǐng)求,并返回ModelAndView實(shí)例;

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

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

    l         默認(rèn)情況下,DispatcherServlet將使用org.springframework.web.servlet.handler. BeanNameUrlHandlerMapping,即使用和客戶請(qǐng)求的URL名稱一致的Controller的bean實(shí)例來處理請(qǐng)求;

    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”屬性設(shè)置中,“key”為請(qǐng)求的URL,而“value”為處理請(qǐng)求的Controller的bean名稱

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

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

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

                  常用的ViewResolver實(shí)例配置如下:

           <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 閱讀(2967) 評(píng)論(3)  編輯  收藏 所屬分類: Spring

    FeedBack:
    # re: Spring核心總結(jié)
    # re: Spring核心總結(jié)[未登錄]
    2014-07-25 18:12 | gaga
    # re: Spring核心總結(jié)[未登錄]
    2014-07-25 18:13 | gaga

    <2014年6月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    IT風(fēng)云人物

    文檔

    朋友

    相冊(cè)

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

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲欧洲中文日韩av乱码| eeuss影院免费直达入口| 亚洲不卡av不卡一区二区| 免费黄色一级毛片| 57pao一国产成视频永久免费| 一区二区三区免费视频播放器| 亚洲一区二区观看播放| 中文字幕亚洲综合精品一区| 久久久久亚洲AV综合波多野结衣 | 国产极品粉嫩泬免费观看| 99精品视频在线免费观看| 一级特黄录像免费播放肥| 美女隐私免费视频看| 亚洲国产欧洲综合997久久| 亚洲一级毛片在线观| 亚洲美女人黄网成人女| 亚洲av无码专区国产乱码在线观看| 亚洲国产精品视频| 国产大片91精品免费观看男同| 一二三四在线播放免费观看中文版视频 | 偷自拍亚洲视频在线观看99| 亚洲色图激情文学| 亚洲一级毛片视频| 亚洲av日韩av无码av| 亚洲娇小性xxxx| 亚洲综合校园春色| 亚洲一区二区三区在线网站| 亚洲另类自拍丝袜第1页| 亚洲网红精品大秀在线观看| 亚洲综合视频在线| 亚洲最大成人网色| 91在线亚洲精品专区| 噜噜噜亚洲色成人网站∨| 婷婷亚洲久悠悠色悠在线播放| 亚洲动漫精品无码av天堂| 亚洲AV无码乱码国产麻豆| 亚洲成人在线电影| 亚洲免费视频观看| 亚洲熟女精品中文字幕| 国产精品亚洲色婷婷99久久精品| 国产区图片区小说区亚洲区|