Spring知識點總結_第1頁
Spring知識點總結_第2頁
Spring知識點總結_第3頁
Spring知識點總結_第4頁
Spring知識點總結_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、關于spring的幾個集合對象介紹ListFactoryBeanListFactoryBean類為開發者提供了一種在Spring的bean配置文件中創建一個具體的列表集合類(ArrayList和LinkedList)。這里有一個 ListFactoryBean 示例,在運行時它將實例化一個ArrayList,并注入到一個 bean 屬性。1. <bean id="emails" class="org.springframework.beans.factory.config.ListFactoryBean"> &#

2、160;  2.  <property name="sourceList">   3.   <list>   4.    <value></value>   5.    <value></value>   6.    <value&

3、gt;</value>   7.    <value></value>   8.   </list>   9.  </property>  10. </bean> 配置<bean id="CustomerBean" class="mon.Customer"><property name=&

4、quot;lists"><bean class="org.springframework.beans.factory.config.ListFactoryBean"><property name="targetListClass"><value>java.util.ArrayList</value></property><property name="sourceList"><list><value>one</valu

5、e><value>2</value><value>three</value></list></property></bean></property></bean>代碼public class App public static void main(String args) ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Custom

6、er cust = (Customer) context.getBean("CustomerBean");System.out.println(cust);結果Customer lists=one, 2, three Type=class java.util.ArrayListMapFactoryBeanorg.springframework.beans.factory.config.MapFactoryBean1. <bean id="emails" class="org.springframework.beans.

7、factory.config.MapFactoryBean">    2.  <property name="sourceMap">   3.   <map>   4.    <entry key="pechorin" value=""/>  5

8、.    <entry key="raskolnikov" value=""/>  6.    <entry key="stavrogin" value=""/>  7.    <entry key="porfiry"

9、 value=""/>  8.   </map>   9.  </property>  10. </bean>  SetFactoryBeanorg.springframework.beans.factory.config.SetFactoryBean1. <bean id="emails" class="org.spri

10、ngframework.beans.factory.config.SetFactoryBean">  2.  <property name="sourceSet">   3.   <set>   4.    <value></value>   5.    <value></value&g

11、t;   6.    <value></value>   7.    <value></value>   8.   </set>   9.  </property>  10. </bean>  PropertiesFactoryBean通過PropertiesFac

12、toryBean來獲取properties配制文件數據1. <bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  2.  <property name="location" value="classpath:com/foo/perties"/&

13、gt;  3. </bean>PropertyPathFactoryBeanorg.springframework.beans.factory.config.PropertyPathFactoryBean通過PropertyPathFactoryBean來指定屬性路徑獲取屬性值1. <bean id="testBean" class="org.springframework.beans.TestBean" singleton="false"> 

14、0;2.  <property name="age" value="10"/>   3.  <property name="spouse">   4.   <bean class="org.springframework.beans.TestBean">   5.    <pr

15、operty name="age" value="11"/>   6.   </bean>   7.  </property>  8. </bean>  9. <bean id="testBean.age" class="org.springframework.beans.factory.config.Prop

16、ertyPathFactoryBean"/>  框架介紹Spring是一個開源框架,Spring是于2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途

17、不僅限于服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。Spring的核心是控制反轉(IoC)和面向切面(AOP)。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式) 輕量級開源框架。框架特征輕量從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴于Spring的特定類。AOP(面向切面)面向切面Spring提供了面向切面編程的豐富支持,

18、允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用對象只實現它們應該做的完成業務邏輯僅此而已。它們并不負責(甚至是意識)其它的系統級關注點,例如日志或事務支持。IOC(控制反轉)控制反轉Spring通過一種稱作控制反轉(IoC)的技術促進了低耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。一般都是調用者依賴被調用者,使用ioc后對象不會被直接調用

19、,而是通過ioc容器來主動提供容器Spring包含并管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建基于一個可配置原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例以及它們是如何相互關聯的。然而,Spring不應該被混同于傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。框架Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。MVCSp

20、ring的作用是整合,但不僅僅限于整合,Spring 框架可以被看做是一個企業解決方案級別的框架。客戶端發送請求,服務器控制器(由DispatcherServlet實現的)完成請求的轉發,控制器調用一個用于映射的類HandlerMapping,該類用于將請求映射到對應的處理器來處理請求。HandlerMapping 將請求映射到對應的處理器Controller(相當于Action)在Spring 當中如果寫一些處理器組件,一般實現Controller 接口,在Controller 中就可以調用一些Service 或DAO 來進行數據操作 ModelAndView 用于存放從DAO 中取出的數據

21、,還可以存放響應視圖的一些數據。 如果想將處理結果返回給用戶,那么在Spring 框架中還提供一個視圖組件ViewResolver,該組件根據Controller 返回的標示,找到對應的視圖,將響應response 返回給用戶Aop是面向對象開發的一種補充,可以在不改變原來的業務邏輯的基礎上動態的增加一些功能,比如增加例子異常處理AOP 面向切面編程。解耦是程序員編碼開發過程中一直追求的。AOP也是為了解耦所誕生。AOP 在Spring框架中被作為核心組成部分之一,最常見的就是事務控制,日志記錄OOP(面向對象編程)針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效

22、的邏輯單元劃分。而AOP則是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。這兩種設計思想在目標上有著本質的差異。特點/優點特點1.方便解耦,簡化開發通過Spring提供的IoC容器,我們可以將對象之間的依賴關系交由Spring進行控制,避免硬編碼所造成的過度程序耦合。有了Spring,用戶不必再為單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,可以更專注于上層的應用。2.AOP編程的支持通過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能可以通過AOP輕松應付。3.聲明式事務的

23、支持在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。優點1.低侵入式設計,代碼污染極低2.獨立于各種應用服務器,基于Spring框架的應用,可以真正實現Write Once,Run Anywhere的承諾3.Spring的DI機制降低了業務對象替換的復雜性,提高了組件之間的解耦4.Spring的AOP支持允許將一些通用任務如安全、事務、日志等進行集中式管理,從而提供了更好的復用5.Spring的ORM和DAO提供了與第三方持久層框架的良好整合,并簡化了底層的數據庫訪問6.Spring并不強制應用完全依賴于Spring,開發者

24、可自由選用Spring框架的部分或全部實現不同類型的參數注入1.注入直接量可以通過<value>標簽進行注入2.引入其他bean組件使用標簽<ref>屬性一般用bean3.注入集合類型的屬性<list><set><map><properties>具體配置詳見參數Bean的作用域Singletton默認值:Spring以單例模式創建bean的實例,即容器中該bean的實例只有一個Prototype:每次從容器中獲取bean時都會創建一個實例Request:用于web應用環境,針對每次http請求都會創建一個實例Session

25、:用于web環境,同一個會話共享一個實例,Bean注入的方式屬性注入構造方法注入在Spring配置文件中實現自動裝配<bean>元素的autowire屬性提供了一種自動注入依賴對象的機制,配置bean時不需要做任何顯式地指定,Spring會自動查找符合條件的依賴對象并實施注入提供了四種自動裝配的類型No:默認值,Spring默認不進行自動裝配,必須顯式指定依賴關系ByName:根據屬性名自動裝配,會查找與屬性名相同的id,Bytype 根據屬性的類型主動裝配Constructor和bytype類似,不過它針對構造方法,如果Spring找到一個bean和構造方法的參數類型相匹配,則通

26、過構造方法注入該依賴對象,找不到拋出異常Spring常用注解  注解說明 注冊注解處理器 方式一:bean<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> 方式二: 命名空間<context:annotation-config /><context:annotationconfig /> 將隱式地向Spring 容器

27、注冊AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor 、 PersistenceAnnotationBeanPostProcessor 以及RequiredAnnotationBeanPostProcessor 這4 個BeanPostProcessor 。 方式三: 命名空間<context:component-scan />如果要使注解工作,則必須配置component-scan ,實際上不需要再配

28、置annotation-config。base-package 屬性指定了需要掃描的類包,類包及其遞歸子包中所有的類都會被處理。還允許定義過濾器將基包下的某些類納入或排除。  啟用Spring MVC 注解 啟動Spring MVC 的注解功能,完成請求和注解POJO 的映射.<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>  注解介紹 

29、              Controller               Service               Autowired 

30、0;             RequestMapping               RequestParam               ModelAttribute

31、               Resource               Repository               Component

32、60;(不推薦使用)               Scope               SessionAttributes              

33、0;InitBinder               Required               Qualifier  1.Controller           &

34、#160;   例如              Controller              public class SoftCreateController extends SimpleBaseController       

35、60;        或者             Controller("softCreateController")               說明      &#

36、160;       Controller 負責注冊一個bean 到spring 上下文中,bean 的ID 默認為類名稱開頭字母小寫  2.Service               例如          

37、    Service              public class SoftCreateServiceImpl implements ISoftCreateService                或者     

38、60;        Service("softCreateServiceImpl")               說明              Service 負責注冊一個bean 到spring

39、 上下文中,bean 的ID 默認為類名稱開頭字母小寫  3.Autowired               例如              Autowired        &#

40、160;     private ISoftPMService softPMService;               或者      Autowired(required=false)     private ISoftPMService softPMService = new SoftPMServiceImpl(

41、);           說明    Autowired 根據bean 類型從spring 上線文中進行查找,注冊類型必須唯一,否則報異常。與Resource 的區別在于,Resource 允許通過bean 名稱或bean 類型兩種方式進行查找Autowired(required=false) 表示,如果spring 上下文中沒有找到該類型的bean 時, 才會使用n

42、ew SoftPMServiceImpl();Autowired 標注作用于 Map 類型時,如果 Map 的 key 為 String 類型,則 Spring 會將容器中所有類型符合 Map 的 value 對應的類型的 Bean 增加進來,用 Bean 的 id 或 name 作為 Map 的 key。Autowired 還有一個作用就是,如果將其標注在 BeanFactory 類型、ApplicationContext 類型、ResourceLoader 類型、ApplicationEventPublisher 類型、MessageSource 類型上,那么 Spring 會自動注入這些

43、實現類的實例,不需要額外的操作。 4.RequestMapping 類Controller RequestMapping("/bbtForum.do")public class BbtForumController              RequestMapping(params = "method=listBoardTopic")public String listBoardTopic(int top

44、icId,User user)     方法              RequestMapping("/softpg/downSoftPg.do")              RequestMapping(value="/softpg/ajaxLoadSoftId.do",method = POS

45、T)              RequestMapping(value = "/osu/product/detail.do", params = "modify=false" , method =POST)   說明    RequestMapping 可以聲明到類或方法上  參數綁定說明如果我們使用以下的 URL 

46、請求:http:/localhost/bbtForum.do?method=listBoardTopic&topicId=1&userId=10&userName=tomtopicId URL 參數將綁定到 topicId 入參上,而 userId 和 userName URL 參數將綁定到 user 對象的 userId 和 userName 屬性中。和 URL 請求中不允許沒有 topicId 參數

47、不同,雖然 User 的 userId 屬性的類型是基本數據類型,但如果 URL 中不存在 userId 參數,Spring 也不會報錯,此時 user.userId 值為 0 。如果 User 對象擁有一個 dept.deptId 的級聯屬性,那么它將和 dept.deptId URL 參數綁定。 5.RequestParam 參數綁定說明RequestParam("id&q

48、uot;)http:/localhost/bbtForum.do?method=listBoardTopic&id=1&userId=10&userName=tomlistBoardTopic(RequestParam("id")int topicId,User user) 中的 topicId 綁定到 id 這個 URL 參數, 那么可以通過對入參使用 RequestParam 注解來達到目的 RequestParam(required=false)

49、:參數不是必須的,默認為trueRequestParam(value="id",required=false)  請求處理方法入參的可選類型               Java 基本數據類型和 String               &

50、#160;    默認情況下將按名稱匹配的方式綁定到 URL 參數上,可以通過 RequestParam 注解改變默認的綁定規則                request/response/session 既可以是 Servlet API 的也可以是 Portlet API 對應的對象,Spring

51、60;會將它們綁定到Servlet 和 Portlet 容器的相應對象上  內部包含了 request 對象 綁定到 request 對應的 Locale 對象上                 可以借此訪問 request 的內容 可以借此操作 response 的內

52、容           任何標注了 RequestParam 注解的入參                被標注 RequestParam 注解的入參將綁定到特定的 request 參數上。 它綁定 Spring MVC 框架中每個請求所創建的潛在的模

53、型對象,它們可以被 Web 視圖對象訪問(如 JSP )           命令/ 表單對象(注:一般稱綁定使用 HTTP GET 發送的 URL 參數的對象為命令對象,而稱綁定使用HTTP POST 發送的 URL 參數的對象為表單對象)          

54、0;          它們的屬性將以名稱匹配的規則綁定到 URL 參數上,同時完成類型的轉換。                     而類型轉換的規則可以通過 InitBinder 注解或通過 HandlerAdapter 的配置進行調 整 &#

55、160;                   為屬性列表中的命令/ 表單對象的校驗結果,注意檢驗結果參數必須緊跟在命令/ 表單對象的后面  可以通過該類型 status 對象顯式結束表單的處理,這相當于觸發 session 清除其中的通過SessionAttributes 定義的屬性 請求處理方法返回值的可選類型 void此時邏輯視圖名由

56、請求處理方法對應的 URL 確定,如以下的方法:RequestMapping("/welcome.do")public void welcomeHandler() 對應的邏輯視圖名為 “ welcome ”  String此時邏輯視圖名為返回的字符,如以下的方法:RequestMapping(method = RequestMethod.GET)public String setupForm(RequestParam("ownerId") int ownerId, ModelMap m

57、odel) Owner owner = this.clinic.loadOwner(ownerId);model.addAttribute(owner);return "ownerForm"對應的邏輯視圖名為 “ ownerForm ” 和返回類型為 void 一樣,邏輯視圖名取決于對應請求的 URL ,如下面的例子:RequestMapping("/vets.do")public ModelMap vetsHandler() return new ModelMap(this

58、.clinic.getVets();對應的邏輯視圖名為 “ vets ” ,返回的 ModelMap 將被作為請求對應的模型對象,可以在 JSP 視圖頁面中訪問到。  ModelAndView當然還可以是傳統的 ModelAndView 。 ModelAttribute               作用域:reques

59、t               例如             RequestMapping("/base/userManageCooper/init.do")             public String handleInit(ModelAttribute("queryBe

60、an") ManagedUser sUser,Model model,)               或者              ModelAttribute("coopMap")/ 將coopMap 返回到頁 面  

61、0;        public Map<Long,CooperatorInfo> coopMapItems()               說明 ModelAttribute 聲明在屬性上,表示該屬性的value 來源于model 里"queryBean" ,并被保存到model 里ModelA

62、ttribute聲明在方法上,表示該方法的返回值被保存到model 里  Resource               例如              Resource              pr

63、ivate DataSource dataSource; / inject the bean named 'dataSource'               或者 Resource(name="dataSource")Resource(type=DataSource.class)  說明Resource 默認按bean 的name 進行查找,如果沒有

64、找到會按type 進行查找,此時與Autowired 類 似在沒有為 Resource 注解顯式指定 name 屬性的前提下,如果將其標注在 BeanFactory 類型、ApplicationContext 類型、ResourceLoader 類型、ApplicationEventPublisher 類型、MessageSource 類型上,那么 Spring 會自動注入這些實現類的實例,不需要額外的操作。此時 name 屬性不需要指定 ( 或者指定為""),否則注入失敗; Repository 與Controller&#

65、160;、Service 類似,都是向spring 上下文中注冊bean ,不在贅述。 Component (不推薦使用) ComponentComponent 是所有受Spring 管理組件的通用形式,Spring 還提供了更加細化的注解形式:  Repository 、Service、Controller ,它們分別對應存儲層Bean ,業務層Bean ,和展示層Bean 。目前版本(2.5 )中,這些注解與Component

66、60;的語義是一樣的,完全通用, 在Spring 以后的版本中可能會給它們追加更多的語義。 所以,我們推薦使用Repository 、Service 、Controller 來替代Component 。 Scope               例如          &

67、#160;     Scope("session")                Repository()                public class UserSessionBean implementsSerializabl

68、e                 說明 在使用XML 定義Bean 時,可以通過bean 的scope 屬性來定義一個Bean 的作用范圍,同樣可以通過Scope 注解來完成       Scope中可以指定如下值:       sing

69、leton:定義bean的范圍為每個spring容器一個實例(默認值)       prototype:定義bean可以被多次實例化(使用一次就創建一次)       request:定義bean的范圍是http請求(springMVC中有效)       session:定義bean的范圍是http會話(springMVC中有效)       global

70、-session:定義bean的范圍是全局http會話(portlet中有效) SessionAttributes 說明Spring 允許我們有選擇地指定 ModelMap 中的哪些屬性需要轉存到 session 中,以便下一個請求屬對應的 ModelMap 的屬性列表中還能訪問到這些屬性。這一功能是通過類定義處標注 SessionAttributes 注解來實現的。SessionAttributes 只能聲明在類上,而不能聲明在方法上。  例如Sessi

71、onAttributes("currUser") / 將ModelMap 中屬性名為currUser 的屬性SessionAttributes("attr1","attr2")SessionAttributes(types = User.class)SessionAttributes(types = User.class,Dept.class)SessionAttributes(types = User.class,Dept.class,value="attr1","attr

72、2")InitBinder 說明如果希望某個屬性編輯器僅作用于特定的 Controller ,可以在 Controller 中定義一個標注 InitBinder 注解的方法,可以在該方法中向 Controller 了注冊若干個屬性編輯器  例如InitBinderpublic void initBinder(WebDataBinder binder) SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M

73、M-dd");dateFormat.setLenient(false);binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false);  Required               例如           &

74、#160;  required                            public  setName(String name)            &#

75、160;   說明               required 負責檢查一個bean在初始化時其聲明的 set方法是否被執行, 當某個被標注了 Required 的 Setter 方法沒有被調用,則 Spring 在解析的時候會拋出異常,以提醒開發者對相應屬性進行設置。 Required 注解只能標注在 Setter 方法之上。因為依賴注入的本質是檢查 Setter 方法是否被調用了,

76、而不是真的去檢查屬性是否賦值了以及賦了什么樣的值。如果將該注解標注在非 setXxxx() 類型的方法則被忽略。 Qualifier               例如              Autowired              Qualifier("softService")              private ISoftPMService softPMService;           說明    &

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論