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

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

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

          1、IoC:

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

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

          2、bean工廠創建bean的三種方式:

          u      通過構造方法直接創建:

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

          u      通過靜態工廠方法創建:

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

          u      通過非靜態工廠方法創建:

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

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

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

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

          u      通過setter方法注入:

          <property name=””></property>

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

          u      通過構造方法注入:

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

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

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

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

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

          n        list:List或數組類型

          n        set:Set類型

          n        map:Map類型

          n        props:Properties類型

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

          (bean標簽的autowire屬性)

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

          (bean標簽的dependency-check屬性)

          7、生命周期方法:

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

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

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

                                             (bean的singleton屬性)

                 9、Aware相關接口:可以通過實現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完成依賴注入之后,再補充一些后續操作,則可以定義一個bean類來實現接口:org.springframework.beans.factory.config.BeanPostProcessor,然后在配置文件中定義該bean類;從而Spring容器會在每一個bean被初始化之前、之后分別執行實現了該接口的bean類的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法;

                        2)BeanFactoryPostProcessor:

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

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

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

          (注意:屬性文件中設定屬性值的格式為: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) 事件的支持:

                 可發布的事件:ApplicationEvent

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

                 事件監聽接口:ApplicationListener

                 11、ApplicationContext管理bean的執行階段:

          l        創建bean;

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

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

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

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

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

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

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

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

                 12、FactoryBean:用來創建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、代理的兩種方式:

          靜態代理:

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

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

          動態代理:

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

          2、AOP的主要原理:動態代理

          3、AOP中的術語:

          l        Aspect:方面,層面

          l        Joinpoint:結合點、聯結點;加入業務流程的點或時機

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

          l        Advice:通知、行為;某個方面的具體實現

          l        Advisor:由Pointcut和Advice共同構成

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

          org.springframework.aop.Pointcut

          5、ProxyFactoryBean:用來創建代理對象

          <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>

          創建代理對象需指定的三要素:

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

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

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

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

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

          要實現的接口:org.springframework.aop.MethodBeforeAdvice

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

          要實現的接口:org.springframework.aop.AfterReturningAdvice

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

          要實現的接口:org.springframework.aop.ThrowsAdvice

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

          要實現的接口:org.aopalliance.intercept.MethodInterceptor

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

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

          2.        創建引入Advice;

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

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

          (需要兩個構造方法的參數: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:根據bean的名字為其自動創建代理對象,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:作為前端控制器,負責分發客戶的請求到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必須實現接口org.springframework.web.servlet.mvc.Controller,實現該接口中的方法handleRequest(),在該方法中處理請求,并返回ModelAndView實例

          3、HandlerMapping:DispatcherServlet根據它來決定請求由哪一個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與呈現在View中的Model對象;

          DispatcherServlet根據它來解析View名稱,并處理呈現在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 閱讀(2971) 評論(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年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

          經典網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 吴旗县| 秦安县| 灵山县| 兴业县| 北票市| 九龙坡区| 屏边| 高邑县| 灵璧县| 泗洪县| 油尖旺区| 游戏| 佛坪县| 神农架林区| 兴文县| 浮梁县| 法库县| 石渠县| 河津市| 贵阳市| 柳林县| 南康市| 彭州市| 循化| 保康县| 乡宁县| 民县| 驻马店市| 鄯善县| 手机| 和林格尔县| 涟源市| 蓬安县| 营山县| 郁南县| 枝江市| 睢宁县| 崇文区| 嘉黎县| 麻江县| 长岛县|