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      通過(guò)構(gòu)造方法直接創(chuàng)建:

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

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

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

          u      通過(guò)非靜態(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      通過(guò)setter方法注入:

          <property name=””></property>

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

          u      通過(guò)構(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)接口:可以通過(guò)實(shí)現(xiàn)Aware接口來(lái)獲得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類來(lái)實(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ó)際化消息的支持:可通過(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)聽(tīng)接口: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:用來(lái)創(chuàng)建bean

                  <bean id="myObject"

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

                         MethodInvokingFactoryBean">

                    <property name="staticMethod">

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

                    </property>

          </bean>

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

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

          1、代理的兩種方式:

          靜態(tài)代理:

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

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

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

          針對(duì)一個(gè)方面編寫(xiě)一個(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:用來(lái)創(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:可用來(lái)指定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屬性用來(lái)指定所要符合的完整類名(包括 package名稱)及方法名;定義該屬性時(shí)可使用的符號(hào)包括:

          符號(hào)
           

          描述

          .
           

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

          +
           

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

          *
           

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

          \
           

          轉(zhuǎn)義字符,用來(lái)轉(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ù)它來(lái)決定請(qǐng)求由哪一個(gè)Controller處理;

          l         默認(rèn)情況下,DispatcherServlet將使用org.springframework.web.servlet.handler. BeanNameUrlHandlerMapping,即使用和客戶請(qǐng)求的URL名稱一致的Controller的bean實(shí)例來(lái)處理請(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:用來(lái)封裝View與呈現(xiàn)在View中的Model對(duì)象;

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

                 5、ViewResolver:DispatcherServlet委托ViewResolver來(lái)解析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 閱讀(2972) 評(píng)論(3)  編輯  收藏 所屬分類: Spring

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

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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風(fēng)云人物

          文檔

          朋友

          相冊(cè)

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

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 分宜县| 项城市| 长沙县| 西峡县| 佛坪县| 寻甸| 乌鲁木齐市| 宜宾市| 永善县| 丰顺县| 安仁县| 柘城县| 宝坻区| 渭源县| 田林县| 慈利县| 黑山县| 册亨县| 鱼台县| 鄂托克旗| 华蓥市| 包头市| 新余市| 浪卡子县| 敖汉旗| 普定县| 志丹县| 酉阳| 崇文区| 抚远县| 湖口县| 红原县| 苍梧县| 广南县| 德昌县| 阳信县| 古田县| 达拉特旗| 丰宁| 治县。| 涟水县|