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 閱讀(2976) 評論(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  回復  更多評論
            

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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

          經典網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 平远县| 凤阳县| 库尔勒市| 旬阳县| 晋宁县| 涿鹿县| 新野县| 南川市| 安西县| 安溪县| 霍城县| 福海县| 农安县| 商都县| 古蔺县| 虞城县| 洞口县| 禹州市| 新野县| 大冶市| 太仓市| 上蔡县| 墨竹工卡县| 嘉鱼县| 威远县| 西昌市| 三亚市| 嵊泗县| 萨嘎县| 社旗县| 文山县| 伊金霍洛旗| 内江市| 张北县| 颍上县| 长寿区| 改则县| 灵寿县| 教育| 浮山县| 盐城市|