Spring 學習筆記

来源:https://www.cnblogs.com/xiqingbo/archive/2022/03/23/java-25.html
-Advertisement-
Play Games

Spring 框架是由於軟體開發的複雜性而創建的。Spring 使用的是基本的 JavaBean 來完成以前只可能由 EJB 完成的事情。 ...


Spring

一. Spring Framework

Spring 是一个轻量级框架,目的是为了让对象之间的耦合性降低(解耦),方便后期代码的维护;

Spring 本质上就是一个 Bean 工厂,应用程序中所有的对象生命周期都是由 Spring 来管理的;

二. Spring 中对象的注入方式

  • set 注入(实体类中的属性必须有 set 方法)

    <bean name="user" class="com.ztkj.entity.User">
    	<property name="userId" value="1"></property>
    	<property name="userName" value="小溪"></property>
    	<property name="userPass" value="123"></property>
    </bean>
    
  • 构造方法注入(实体类中必须有带参数的构造方法)

    <bean name="user" class="com.ztkj.entity.User">
    	<constructor-arg index="0" value="1"></constructor-arg>
    	<constructor-arg index="1" value="小悕"></constructor-arg>
    	<constructor-arg index="2" value="666"></constructor-arg>
    </bean>
    

三. Spring 对象模式

Spring 的配置文件中,一个 bean 标签代表一个对象,创建的时候默认是采取单例模式,若想采取原型模式,则要给 bean 标签加上scope="prototype"

  • 单例模式

    public class Single {
    	// 自身成为自身的静态属性
    	private static Single s = null;
    
    	// 构造方法私有化
    	private Single() {}
    
    	// 提供一个外部可访问的静态方法
    	public static synchronized Single getSingle() {
    		if (s == null) {
    			s = new Single();
    		}
    		return s;
    	}
    }
    
  • 原型模式

    与单例模式相反,每次获取的对象都是新的对象

  • 工厂模式

    根据配置文件,动态的获取一组类中某个类的实例,一般来讲这一组类都实现了同一个接口或继承了同一个类

  • 代理模式

    • Hibernate 懒加载返回的是一个代理对象
    • Struts 的 action 代理

四. Spring 核心

  • IOC(控制反转)/ DI(依赖注入)
  • AOP(面向切面编程)
IOC / DI

在没有出现 Spring 框架之前,一个对象调用另一个对象的方法时,需要先在当前对象中创建出另一个对象,这些对象之间才有了关系(耦合性较高),而Spring 框架,应用程序中所有的对象都是由 Spring 容器来管理它们的生命周期,此时一个对象需要调用另一个对象的方法时,Spring 容器会把相对应的对象给你,则不需要在当前类创建新的对象

把 SessionFactory 对象注入到 Dao 层,把 Dao 层对象注入到 Service 层,把 Service 层对象注入到 Action 层

AOP

在程序运行到某一个点时(切入点),使程序暂时停下来,去执行人为切入的一段代码,再继续执行原来的业务逻辑代码,切入的代码并不会影响到原来业务逻辑代码的执行,一般用于事务管理或日志管理

静态工厂注入,实例工厂注入

五. Spring 的通知类型

  1. 前置通知:程序执行到切入点(Service 层的方法)之前执行切入的代码
  2. 后置通知:程序执行到切入点(Service层的方法)之后执行切入的代码
  3. 异常通知:切入点抛出异常
  4. 环绕通知
  5. 引入通知

六. SSH 框架整合

  1. 创建实体类,配置映射文件,通过 Hibernate SchemaExport 对象创表
  2. 编写 Dao 层接口和实现类(封装 BaseDao)
  3. 编写 Service 层接口和实现类
  4. web.xml中配置 Struts2 的核心过滤器,创建 Action,并在struts.xml中配置 Action 信息
  5. web.xml中配置 Spring 的监听器,并指定读取的文件路径
  6. 在 Spring 的配置文件中配置:dataSource,sessionFactory,transactionManager(事务管理器),tx:advice(事务传播特性),aop(面向切面编程)

七. Spring 容器什么时候被创建?

​ Tomcat 服务器启动的时候,会读取web.xml配置文件,加载 Spring 的监听器,Spring 监听器此时就会去读取 Spring 的配置文件(applicationContext.xml) 后实例化所有的对象

本文来自博客园,作者:Schieber,转载请注明原文链接:https://www.cnblogs.com/xiqingbo/p/java-25.html


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

-Advertisement-
Play Games
更多相關文章
  • 一、新增的語義化佈局標簽: 1. header和footer標簽 頁面中一個內容區塊的頭部和尾部佈局 2. nav 導航區域 3. article標簽 頁面中獨立的內容部分佈局 4. aside標簽 在獨立內容之外,但是又與article有關聯的部分佈局 二、新增媒體標簽 1. audio(音頻) ...
  • 前言 在 《一篇帶你用 VuePress + Github Pages 搭建博客》中,我們使用 VuePress 搭建了一個博客,最終的效果查看:TypeScript 中文文檔。 在搭建這樣一個博客後,其實還有很多的優化工作需要做,本篇我們來盤點一下那些完成基礎搭建後必做的 10 個優化。 1. 開 ...
  • 前言 大部分的面試者在IT行業面試中,提及設計模式,可以列舉一大堆,但是面試官要求細說的時候,往往部分基礎不夠牢固的同學只能提及簡單工廠。今天我們來對面試過程中最常見的簡單工廠、工廠方法和抽象工廠進行一個剖析,喜歡的朋友可以點個關註哦。 正文 在面向對象的編程中,一般通過繼承和虛函數來提供抽象能力, ...
  • 外觀模式又叫門面模式,屬於結構型模式;是一種通過為多個複雜的子系統提供一個一致的介面,而使這些子系統更加容易被訪問的模式。該模式對外有一個統一介面,外部應用程式不用關心內部子系統的具體細節,這樣會大大降低應用程式的複雜度,提高了程式的可維護性。 現在微服務和模塊化越來越流行,我們都會把一個複雜的系統 ...
  • 《零基礎學Java》 標簽組件與圖標 在Swing中顯示文本或提示信息可以使用標簽(JLabel),它可以顯示文字和圖標。 JLabel 標簽組件 標簽由 JLabel類 定義,它的父類為 JComponent類。標簽可以顯示一行只讀文本,一個圖像(它不能產生任何事件)。 JLabel類常用的構造方 ...
  • 1 項目介紹 最開始是一個單體應用,所有功能模塊都寫在一個項目里,後來覺得項目越來越大,於是決定把一些功能拆分出去,形成一個一個獨立的微服務,於是就有個問題了,登錄、退出、許可權控制這些東西怎麼辦呢?總不能每個服務都複製一套吧,最好的方式是將認證與鑒權也單獨抽離出來作為公共的服務,業務系統只專心做業務 ...
  • 非同步請求特點:某一個時刻,瀏覽器可以委托多個非同步請求對象發送請求,無需等待請求處理完成 ...
  • 泛型類:把泛型定義在類上 package Day16; //泛型類:把泛型定義在類上 public class ObjectDemo<T> { //把泛型定義在類上 調用時只能調用和添加本類型的數據 private T obj; public void setObj(T obj) { this.ob ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...