spring理解

来源:http://www.cnblogs.com/mengxiao/archive/2016/09/12/5866905.html
-Advertisement-
Play Games

Struts與Hibernate可以做什麼事? Struts,Mvc中控制層解決方案,可以進行請求數據自動封裝、類型轉換、文件上傳、效驗… Hibernate,持久層的解決方案;可以做到,把對象保存到資料庫,從資料庫中取出的是對象。 傳統的開發模式 基於mvc模式進行項目開發; 基於mvc的項目框架 ...


Struts與Hibernate可以做什麼事?

Struts,Mvc中控制層解決方案,可以進行請求數據自動封裝、類型轉換、文件上傳、效驗…

Hibernate,持久層的解決方案;可以做到,把對象保存到資料庫,從資料庫中取出的是對象。

傳統的開發模式

基於mvc模式進行項目開發;

基於mvc的項目框架結構:Entity / dao / service / action

遇到的問題:

   1. 對象創建創建能否寫死?

    2. 對象創建細節

        對象數量

            action  多個   【維護成員變數】

            service 一個   【不需要維護公共變數】

            dao     一個   【不需要維護公共變數】

        創建時間

            action    訪問時候創建

            service   啟動時候創建

            dao       啟動時候創建

    3. 對象的依賴關係

        action 依賴 service

        service依賴 dao

總結:

spring就是解決上面的問題的!

簡單來說,就是處理對象的創建的、以及對象的依賴關係! 

Inversion on Control , 控制反轉 IOC

對象的創建交給外部容器完成,這個就做控制反轉.

依賴註入,  dependency injection

處理對象的依賴關係

控制反轉, 解決對象創建的問題 【對象創建交給別人

依賴註入,在創建完對象後, 對象的關係的處理就是依賴註入 【通過set方依賴註入

AOP

面向切麵編程。切麵,簡單來說來可以理解為一個類,由很多重覆代碼形成的類。

切麵舉例:事務、日誌、許可權;

Spring框架,可以解決對象創建以及對象之間依賴關係的一種框架。

且可以和其他框架一起使用;Spring與Struts,  Spring與hibernate  (起到整合(粘合)作用的一個框架)

Spring提供了一站式解決方案:

1) Spring Core  spring的核心功能: IOC容器, 解決對象創建及依賴關係

2) Spring Web  Spring對web模塊的支持。

     a.可以與struts整合,讓struts的action創建交給spring

     b.spring mvc模式

3) Spring DAO  Spring 對jdbc操作的支持  【JdbcTemplate模板工具類】

4) Spring ORM  spring對orm的支持:

    a.既可以與hibernate整合,【session】

    b.也可以使用spring的對hibernate操作的封裝

5)Spring AOP   切麵編程

6)SpringEE   spring 對javaEE其他模塊的支持

 

1.引jar包

commons-logging-1.1.3.jar           日誌

spring-beans-3.2.5.RELEASE.jar        bean節點

spring-context-3.2.5.RELEASE.jar       spring上下文節點

spring-core-3.2.5.RELEASE.jar         spring核心功能

spring-expression-3.2.5.RELEASE.jar    spring表達式相關表

2.核心配置文件: applicationContext.xml  

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引約束 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">        
      <!-- IOC容器的配置,所有要創建的對象 都 在這裡配置-->
       <!-- 有了類名通過反射創建對象 -->
      <bean id="user"  class = "service.User"></bean>              
</beans>

3.

 1 package service;
 2 
 3 public class User {
 4     private int id ; 
 5     private String name;
 6     public int getId() {
 7         return id;
 8     }
 9     public void setId(int id) {
10         this.id = id;
11     }
12     public String getName() {
13         return name;
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18 
19 }

4.

SpringIOC容器,是spring核心內容。

作用: 創建對象 & 處理對象的依賴關係

 1 package service;
 2 
 3 import org.junit.Test;
 4 import org.springframework.beans.factory.BeanFactory;
 5 import org.springframework.beans.factory.xml.XmlBeanFactory;
 6 import org.springframework.core.io.ClassPathResource;
 7 import org.springframework.core.io.Resource;
 8 
 9 public class app {
10     @Test
11     public void testIOC(){
12         
13         //User user = new User();之前的創建對象
14         //現在把對象的創建交給Spring的IOC容器,在applicationContext.xml里配置
15         //載入配置容器
16         Resource r = new ClassPathResource("service/applicationContext.xml");
17         //創建IOC容器對象,bean的工廠       
18         //IOC容器 = 工廠類+applicationContext.xml
19         BeanFactory f = new XmlBeanFactory(r);
20         //得到容器創建的對象
21         User user = (User) f.getBean("user");
22         
23         System.out.println(user.getId());
24     }
25 
26 }

applicationContext.xml 

IOC容器創建對象:

創建對象, 有幾種方式:

1) 調用無參數構造器

2) 帶參數構造器

3) 工廠創建對象

工廠類,靜態方法創建對象

工廠類,非靜態方法創建對象

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xsi:schemaLocation="
 7         http://www.springframework.org/schema/beans
 8   http://www.springframework.org/schema/beans/spring-beans.xsd
 9         http://www.springframework.org/schema/context
10         http://www.springframework.org/schema/context/spring-context.xsd">
11     
12     <!-- ###############對象創建############### -->
13     
14     <!-- 1. 預設無參數構造器 
15     <bean id="user1" class="cn.itcast.b_create_obj.User"></bean>
16     -->
17     
18     <!-- 2. 帶參數構造器 -->
19     <bean id="user2" class="cn.itcast.b_create_obj.User">
20         <constructor-arg index="0" type="int" value="100"></constructor-arg>
21         <constructor-arg index="1" type="java.lang.String" value="Jack"></constructor-arg>
22     </bean>
23     
24     <!-- 定義一個字元串,值是"Jack" ;  String s = new String("jack")-->
25     <bean id="str" class="java.lang.String">
26         <constructor-arg value="Jacks"></constructor-arg>
27     </bean>
28     <bean id="user3" class="cn.itcast.b_create_obj.User">
29         <constructor-arg index="0" type="int" value="100"></constructor-arg>
30         <constructor-arg index="1" type="java.lang.String" ref="str"></constructor-arg>
31     </bean>
32     
33     
34     <!-- 3. 工廠類創建對象 -->
35     <!-- # 3.1 工廠類,實例方法 -->
36     <!-- 先創建工廠 -->
37     <bean id="factory" class="cn.itcast.b_create_obj.ObjectFactory"></bean>
38     <!-- 在創建user對象,用factory方的實例方法 -->
39     <bean id="user4" factory-bean="factory" factory-method="getInstance"></bean>
40     
41     
42     <!-- # 3.2 工廠類: 靜態方法 -->
43     <!-- 
44         class 指定的就是工廠類型
45         factory-method  一定是工廠裡面的“靜態方法”
46      -->
47     <bean id="user" class="cn.itcast.b_create_obj.ObjectFactory" factory-method="getStaticInstance"></bean>
48 </beans>    

Spring中,如何給對象的屬性賦值?  【DI, 依賴註入】

1) 通過構造函數

2) 通過set方法給屬性註入值

3) p名稱空間

4)自動裝配(瞭解)

5) 註解

set方法

 1 <!-- dao instance -->
 2 //創建對象
 3     <bean id="userDao" class="cn.itcast.c_property.UserDao"></bean>
 4 
 5     <!-- service instance -->
 6     <bean id="userService"  class="cn.itcast.c_property.UserService">
 7         <property name="userDao" ref="userDao"></property>
 8     </bean>
 9     
10     <!-- action instance -->
11     <bean id="userAction"  class="cn.itcast.c_property.UserAction">
12 //處理對象的依賴關係
13         <property name="userService" ref="userService"></property>
14     </bean>

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 繼續解決mplayer安裝不上的問題: 多次嘗試後,把源換回官方然後 update&upgrade後安裝 問題解決 時區問題解決: 裡面的第五項 Internationalisation Options --> Change Timezone --> Asia --> Chongqing(找了半天沒 ...
  • 之前裝的是live版 就是沒有桌面的版本,想看能hdmi看電影,於是找了教程安裝omxplayer 用 命令 通過hdmi播放電影 具體安裝過程發在貼吧里了:http://tieba.baidu.com/p/4766986525?see_lz=1 但是依然不能掛字幕.... 無奈今天重裝rasbia ...
  • 近期項目查詢資料庫太慢,持久層也沒有開啟二級緩存,現希望採用Redis作為緩存。為了不改寫原來代碼,在此採用AOP+Redis實現。 目前由於項目需要,只需要做查詢部分: 數據查詢時每次都需要從資料庫查詢數據,資料庫壓力很大,查詢速度慢,因此設置緩存層,查詢數據時先從redis中查詢,如果查詢不到, ...
  • 在前面的幾篇關於Free編程的討論示範中我們均使用了基礎類型的運算結果。但在實際應用中因為需要考慮運算中出現異常的情況,常常會需要到更高階複雜的運算結果類型如Option、Xor等。因為Monad無法實現組合(monad do not compose),我們如何在for-comprehension中 ...
  • ...
  • 一、必備插件 1.babel:es6的語法支持 2.karma:測試框架 3.jasmine:斷言框架 4.webpack:打包工具 5.karma-webpack:karma調用webpack打包介面的插件 二、實現步驟 1.通過npm安裝上述必備的插件包 2.創建webpack.test.con ...
  • 誰沒掉進過幾個大坑 記得好久之前,總能時不時在某個地方看到一些標語,往往都是上面一個偉人的頭像,然後不管是不是他說的話,下麵總是有看起來很政治正確且沒卵用的屁話,我活到目前為止,最令我笑的肚子痛得是下麵這段標語。 態度決定高度,思路決定出路,細節決定成敗,環境決定心境,格局決定結局。 沒錯,這是一個 ...
  • R語言 1997年成為GNU項目 開源免費 R官方網址 www.r-project.org R是數據分析領域的語言小巧靈活,通過擴展包來增強功能繪圖功能代碼簡單 開發環境R + RStudio 1、數據類型character 字元numeric 數值型,實數或小數integer 整型complex ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...