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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...