spring總結

 
  1. 1、    IoC(Inversion of control): 控制反轉 
  2.  
  3. 一、IoC: 
  4.  
  5. 概念:控制權由對象自己轉向容器;由容器根據配置文件去建立實例並建立各個實例之間的依賴關係 
  6.  
  7. 核心:bean工廠;在Spring中,bean工廠建立的各個實例稱做bean 
  8.  
  9. 二、bean工廠建立bean的三種方式: 
  10.  
  11. u      經過構造方法直接建立: 
  12.  
  13. <bean id=」」 class=」bean class name」> 
  14.  
  15. u      經過靜態工廠方法建立: 
  16.  
  17. <bean id=」」 class=」factory class name」 factory-method=」」> 
  18.  
  19. u      經過非靜態工廠方法建立: 
  20.  
  21. <bean id=」factory」 class=」factory class name」> 
  22.  
  23. <bean id=」」 factory-bean=」 factory」 factory-method=」」> 
  24.  
  25. 三、Spring中實現IoC的方式:依賴注入(Dependency Injection) 
  26.  
  27. Spring中依賴注入的兩種方式: 
  28.  
  29. u      經過setter方法注入: 
  30.  
  31. <property name=」」></property> 
  32.  
  33. 其中,name屬性的取值依setter方法名而定 
  34.  
  35. u      經過構造方法注入: 
  36.  
  37. <constructor-arg index=」」></ constructor-arg> 
  38.  
  39. 其中,index表示構造方法中的參數索引(第一個參數索引爲0) 
  40.  
  41. 四、設置屬性時可選的標籤: 
  42.  
  43. n        value:基本類型(封裝類型)或String類型 
  44.  
  45. n        ref:引用工廠中其它的bean 
  46.  
  47. n        list:List或數組類型 
  48.  
  49. n        set:Set類型 
  50.  
  51. n        map:Map類型 
  52.  
  53. n        props:Properties類型 
  54.  
  55. 五、自動裝配:自動將某個bean 注入到另外一個bean的屬性當中 
  56.  
  57. (bean標籤的autowire屬性) 
  58.  
  59. 六、依賴檢查:檢查bean的屬性是否完成依賴關係的注入 
  60.  
  61. (bean標籤的dependency-check屬性) 
  62.  
  63. 七、生命週期方法: 
  64.  
  65.               init-method(也可實現接口org.springframework.beans.factory.InitializingBean) 
  66.  
  67. destroy-method(也可實現接口DisposableBean) 
  68.  
  69.        八、單例bean:默認狀況下,從bean工廠所取得的實例爲Singleton 
  70.  
  71.                                    (bean的singleton屬性) 
  72.  
  73.        九、Aware相關接口:能夠經過實現Aware接口來得到Spring所提供的資源 
  74.  
  75. l        org.springframework.beans.factory.BeanNameAware 
  76.  
  77. l        org.springframework.beans.factory.BeanFactoryAware 
  78.  
  79. l        org.springframework.context.ApplicationContextAware 
  80.  
  81. 十、ApplicationContext的功能擴展: 
  82.  
  83. 1)BeanPostProcessor:若想在Spring對bean完成依賴注入以後,再補充一些後續操做,則能夠定義一個bean類來實現接口:org.springframework.beans.factory.config.BeanPostProcessor,而後在配置文件中定義該bean類;從而Spring容器會在每個bean被初始化以前、以後分別執行實現了該接口的bean類的postProcessBeforeInitialization()方法和postProcessAfterInitialization()方法; 
  84.  
  85.               2)BeanFactoryPostProcessor: 
  86.  
  87. l        CustomEditorConfigurer:可藉助實現了接口java.beans.PropertyEditor的類,並依據當中的實現,將字符串類型轉換爲指定類型的對象; 
  88.  
  89. l        PropertyPlaceholderConfigurer:可將配置文件中屬性值用「${key}」形式表示,則會將其值替換成指定的屬性文件中key所對應的value; 
  90.  
  91. l        PropertyOverrideConfigurer:可藉助該類在指定的屬性文件中設定一些優先的屬性(將忽略配置文件中對應屬性的設定值); 
  92.  
  93. (注意:屬性文件中設定屬性值的格式爲:beanName.propertyName=value) 
  94.  
  95. 3) 國際化消息的支持:可經過ApplicationContext的getMessage()方法得到指定資源文件中的消息;配置以下: 
  96.  
  97. <bean 
  98.  
  99. id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
  100.  
  101.     <property name="basename"> 
  102.  
  103.       <value>first/msg</value> 
  104.  
  105.     </property > 
  106.  
  107.   </bean> 
  108.  
  109. 4) 事件的支持: 
  110.  
  111.        可發佈的事件:ApplicationEvent 
  112.  
  113.        發佈事件的方法:publishEvent(ApplicationEvent) 
  114.  
  115.        事件監聽接口:ApplicationListener 
  116.  
  117.        十一、ApplicationContext管理bean的執行階段: 
  118.  
  119. l        建立bean; 
  120.  
  121. l        屬性注入(依賴關係的注入); 
  122.  
  123. l        BeanNameAware接口實現類的setBeanName()方法; 
  124.  
  125. l        BeanFactoryAware接口實現類的setBeanFactory()方法; 
  126.  
  127. l        ApplicationContextAware接口實現類的setApplicationContext()方法; 
  128.  
  129. l        BeanPostProcessor接口實現類中的postProcessBeforeInitialization()方法; 
  130.  
  131. l        InitializingBean接口實現類的afterPropertiesSet()方法; 
  132.  
  133. l        Bean定義文件中init-method屬性所指定的方法; 
  134.  
  135. l        BeanPostProcessor接口實現類中的postProcessAfterInitialization()方法; 
  136.  
  137.        十二、FactoryBean:用來建立bean 
  138.  
  139.         <bean id="myObject"  
  140.  
  141.               class="org.springframework.beans.factory.config. 
  142.  
  143.                MethodInvokingFactoryBean"> 
  144.  
  145.           <property name="staticMethod"> 
  146.  
  147.             <value>com.whatever.MyClassFactory.getInstance</value> 
  148.  
  149.           </property> 
  150.  
  151. </bean> 
  152.  
  153. (注意:經過bean工廠的getBean(「myObject」)獲得的是FactoryBean所生產的產品;getBean(「&myObject」)獲得的是FactoryBean實例自己) 
  154.  
  155. 2、AOP(Aspect-Oriented Programming): 面向方面編程 
  156.  
  157. 一、代理的兩種方式: 
  158.  
  159. 靜態代理: 
  160.  
  161. l        針對每一個具體類分別編寫代理類; 
  162.  
  163. l        針對一個接口編寫一個代理類; 
  164.  
  165. 動態代理: 
  166.  
  167. 針對一個方面編寫一個InvocationHandler,而後借用JDK反射包中的Proxy類爲各類接口動態生成相應的代理類 
  168.  
  169. 二、AOP的主要原理:動態代理 
  170.  
  171. 三、AOP中的術語: 
  172.  
  173. l        Aspect:方面,層面 
  174.  
  175. l        Joinpoint:結合點、聯結點;加入業務流程的點或時機 
  176.  
  177. l        Pointcut:切入點、做用點;指定某個方面在哪些聯結點織入到應用程序中 
  178.  
  179. l        Advice:通知、行爲;某個方面的具體實現 
  180.  
  181. l        Advisor:由Pointcut和Advice共同構成 
  182.  
  183. 四、Pointcut:Spring根據類名稱及方法名稱定義Pointcut,表示Advice織入至應用程序的時機; 
  184.  
  185. org.springframework.aop.Pointcut 
  186.  
  187. 五、ProxyFactoryBean:用來建立代理對象 
  188.  
  189. <bean id="proxy" 
  190.  
  191. class="org.springframework.aop.framework.ProxyFactoryBean"> 
  192.  
  193.     <property name="target"> 
  194.  
  195.          <ref bean="target bean"/> 
  196.  
  197.     </property> 
  198.  
  199.     <property name="proxyInterfaces"> 
  200.  
  201.          <list> 
  202.  
  203. <value>interfaces of target bean implemented</value> 
  204.  
  205. </list> 
  206.  
  207.     </property> 
  208.  
  209.     <property name="interceptorNames"> 
  210.  
  211.            <list> 
  212.  
  213.               <value>Advice/Advisor bean</value> 
  214.  
  215.          </list> 
  216.  
  217.     </property> 
  218.  
  219. </bean> 
  220.  
  221. 建立代理對象需指定的三要素: 
  222.  
  223. l        target:設定目標對象(只能是一個); 
  224.  
  225. l         proxyInterfaces:設定代理接口(目標對象所實現的接口); 
  226.  
  227. l        interceptorNames:設定攔截器的名字(各個advice或advisor bean的列表) 
  228.  
  229. 六、Advice:五種(根據織入的時機不一樣而劃分) 
  230.  
  231. l        Before Advice:在目標對象的方法執行以前加入行爲; 
  232.  
  233. 要實現的接口:org.springframework.aop.MethodBeforeAdvice 
  234.  
  235. l        After Advice:在目標對象的方法執行以後加入行爲; 
  236.  
  237. 要實現的接口:org.springframework.aop.AfterReturningAdvice 
  238.  
  239. l        Throw Advice:在目標對象的方法發生異常時加入行爲 
  240.  
  241. 要實現的接口:org.springframework.aop.ThrowsAdvice 
  242.  
  243. l        Around Advice:在目標對象的方法執行先後加入行爲 
  244.  
  245. 要實現的接口:org.aopalliance.intercept.MethodInterceptor 
  246.  
  247. l        Introduction Advice:引入的行爲(增長了可操做的方法) 
  248.  
  249. 1.        聲明要添加的功能接口; 
  250.  
  251. 2.        建立引入Advice; 
  252.  
  253. (繼承org.springframework.aop.support.DelegatingIntroductionInterceptor,並實現添加的功能接口) 
  254.  
  255. 3.        在配置文件中定義一個DefaultIntroductionAdvisor的bean 
  256.  
  257. (須要兩個構造方法的參數:Advice和添加的功能接口) 
  258.  
  259. 七、PointcutAdvisor:Pointcut定義了Advice的應用時機;在Spring中,使用PointcutAdvisor將Pointcut和Advice結合爲一個對象 
  260.  
  261. l         NameMatchMethodPointcutAdvisor:可用來指定Advice所要應用的目標對象上的方法名稱 
  262.  
  263. <bean id="nameAdvisor" 
  264.  
  265. class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor"> 
  266.  
  267.     <property name="mappedName"> 
  268.  
  269.       <value>do*</value> 
  270.  
  271.     </property> 
  272.  
  273.     <property name="advice"> 
  274.  
  275.       <ref local="AdviceBeanName"/> 
  276.  
  277.     </property> 
  278.  
  279. </bean> 
  280.  
  281. l         RegexpMethodPointcutAdvisor:可以使用Regular expression定義Pointcut,在符合Regular expression的狀況下應用Advice,其pattern屬性用來指定所要符合的完整類名(包括 package名稱)及方法名;定義該屬性時可以使用的符號包括: 
  282.  
  283. 符號 
  284.      
  285.  
  286. 描述 
  287.  
  288.      
  289.  
  290. 符合任意一個字符 
  291.  
  292.      
  293.  
  294. 符合前一個字符一次或屢次 
  295.  
  296.      
  297.  
  298. 符合前一個字符零次或屢次 
  299.  
  300.      
  301.  
  302. 轉義字符,用來轉義正則表達式中使用到的字符 
  303.  
  304.        <bean id="regexpAdvisor" 
  305.  
  306. class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> 
  307.  
  308.           <property name="pattern"> 
  309.  
  310.                <value>.*do.*</value> 
  311.  
  312.           </property> 
  313.  
  314.           <property name="advice"> 
  315.  
  316.                <ref local="AdviceBeanName"/> 
  317.  
  318.           </property> 
  319.  
  320.      </bean> 
  321.  
  322. 八、AutoProxy:自動代理 
  323.  
  324. l        BeanNameAutoProxyCreator:根據bean的名字爲其自動建立代理對象,bean工廠自動返回其代理對象: 
  325.  
  326. <bean 
  327.  
  328. class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> 
  329.  
  330. <property name="beanNames"> 
  331.  
  332. <list> 
  333.  
  334.         <value>beanName</value> 
  335.  
  336. </list> 
  337.  
  338. </property> 
  339.  
  340. <property name="interceptorNames"> 
  341.  
  342. <list> 
  343.  
  344. <value>Advice/Advisor Bean Name</value> 
  345.  
  346.                             </list> 
  347.  
  348. </property> 
  349.  
  350. </bean> 
  351.  
  352. l        DefaultAdvisorAutoProxyCreator:自動將Advisor應用到符合Pointcut的目標對象上 
  353.  
  354. <bean id="regexpAdvisor" 
  355.  
  356. class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> 
  357.  
  358.     <property name="pattern"> 
  359.  
  360.       <value>.*do.*</value> 
  361.  
  362.     </property> 
  363.  
  364.     <property name="advice"><ref local="AdviceName"/></property> 
  365.  
  366. </bean> 
  367.  
  368. <bean 
  369.  
  370. class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> 
  371.  
  372. 3、Spring的Web MVC: 
  373.  
  374.        一、DispatcherServlet:做爲前端控制器,負責分發客戶的請求到Controller; 
  375.  
  376.               在web.xml中的配置以下: 
  377.  
  378.        <servlet> 
  379.  
  380.       <servlet-name>mvc</servlet-name> 
  381.  
  382.       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  383.  
  384.          <init-param> 
  385.  
  386.           <param-name>contextConfigLocation</param-name> 
  387.  
  388.           <param-value>/WEB-INF/mvc-servlet.xml</param-value> 
  389.  
  390.       </init-param> 
  391.  
  392.       <load-on-startup>1</load-on-startup> 
  393.  
  394.       </servlet> 
  395.  
  396.       <servlet-mapping> 
  397.  
  398.       <servlet-name>mvc</servlet-name> 
  399.  
  400.       <url-pattern>*.do</url-pattern> 
  401.  
  402.       </servlet-mapping> 
  403.  
  404.        二、Controller:負責處理客戶請求,並返回ModelAndView實例; 
  405.  
  406. Controller必須實現接口org.springframework.web.servlet.mvc.Controller,實現該接口中的方法handleRequest(),在該方法中處理請求,並返回ModelAndView實例 
  407.  
  408. 三、HandlerMapping:DispatcherServlet根據它來決定請求由哪個Controller處理; 
  409.  
  410. l         默認狀況下,DispatcherServlet將使用org.springframework.web.servlet.handler. BeanNameUrlHandlerMapping,即便用和客戶請求的URL名稱一致的Controller的bean實例來處理請求; 
  411.  
  412. l         另一種經常使用的HandlerMapping爲org.springframework.web.servlet.handler. SimpleUrlHandlerMapping,配置以下: 
  413.  
  414. <bean 
  415.  
  416. class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
  417.  
  418.     <property name="mappings"> 
  419.  
  420.       <props> 
  421.  
  422.         <prop key="/add.do">add</prop> 
  423.  
  424.       </props> 
  425.  
  426.     </property> 
  427.  
  428. </bean> 
  429.  
  430. 在以上「mappings」屬性設置中,「key」爲請求的URL,而「value」爲處理請求的Controller的bean名稱 
  431.  
  432. 四、ModelAndView:用來封裝View與呈如今View中的Model對象; 
  433.  
  434. DispatcherServlet根據它來解析View名稱,並處理呈如今View中的Model對象 
  435.  
  436.        五、ViewResolver:DispatcherServlet委託ViewResolver來解析View名稱; 
  437.  
  438.               經常使用的ViewResolver實例配置以下: 
  439.  
  440.        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
  441.  
  442.            <property name="prefix"> 
  443.  
  444.                  <value>/</value> 
  445.  
  446.            </property> 
  447.  
  448.             <property name="suffix"> 
  449.  
  450.                   <value>.jsp</value> 
  451.  
  452.            </property> 
  453.  
  454.       </bean> 
  455.  
  456. 4、Spring Data Access 
  457.  
  458.        一、Template 
  459.  
  460.        二、Dao Support 
  461.  
  462.        三、Transaction Manager 
  463.  
  464.        四、Transaction Proxy 
相關文章
相關標籤/搜索