SSM框架-Spring


簡介

Spring是一顆開源框架,為了解決企業應用程序開發復雜性而創建,主要優勢是分層架構,簡化J2EE開發;
Spring是一個輕量級控制反轉(IoC)和面向切面(AOP)的容器框架。

核心模塊

Spring框架由七個定義明確的模塊組成

  1. 核心容器(Core)
    Spring最核心的部分,提供了依賴注入(DependencyInjection)特征來實現容器對Bean管理,最基本的概念是BeanFactory,是任何Spring應用的核心,BeanFactory是工廠模式的一個實現,它使用IoC將應用配置和依賴說明從實際的應用代碼中分離出來。該模塊包含Core、Beans、Context 和 Expesssion Language模塊
    Core 和 Beans是框架的基礎部分

  2. 應用上下文模塊(Context)
    該模塊構建於Core 和 Beans 之上,Context繼承了Beans的特性,提供了一種類似於JNDI注冊器的框架式的對象訪問方法,為Spring核心提供了大量的擴展;ApplicationContext只是Context的一個接口

  3. AOP模塊
    AOP模塊提供了一個符合AOP聯盟標准的面向切面編程的實現,讓你可以定義方法攔截器和切面,從而將邏輯代碼分開,降低耦合度

  4. JDBC抽象和DAO模塊
    JDBC模塊提供了一個JDBC抽象層,它可以消除冗長的JDBC編碼和解析數據庫廠商特有的錯誤代碼,包含了Spring對JDBC數據封裝的所有類

  5. 對象/關系映射集成模塊(ORM)
    對象-關系映射API,如JPA,JDO,Hobernate,iBatis等提供一個交互層,利用ORM封裝包,可以混合使用所有Spring提供的特性進行O/R映射

  6. Spring的Web模塊
    提供一個基礎的面向Web的集成特性,例如,多文件上傳、使用servlet listeners初始化IOC容器以及一個面向Web的應用上下文,還包含Spring遠程支持中的Web相關部分

  7. Spring的MVC框架
    使得模型范圍內的代碼和web forms之間的代碼能夠清晰的分離,並與Spring框架的其他特性集成在一起

  8. Test
    支持使用JUnit和TestNG對Spring組件進行測試

Spring用到的設計模式(https://www.cnblogs.com/AndyAo/p/8666385.html)

  1. 簡單工廠(又叫靜態工廠模式)
    簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。
    spring中的BeanFactory就是簡單工廠模式的體現,根據傳入的唯一標識來創建bean對象;單是否是在傳入參數后創建還是傳入參數前創建這個要根據具體情況來定
  2. 工廠方法(Factory Method)
    工廠方法就是將對象的創建和使用分離,講對象的創建及初始化職責交給工廠對象
    一般情況下,應用程序有自己的工廠創建bean,如果將應用程序自己的工廠對象交給spring管理,那么spring管理的就不是普通的bean,而是工廠Bean
    例如:

import java.util.Random;
public class StaticFactoryBean {
public static Integer createRandom() {
return new Integer(new Random().nextInt());
}
}
建一個config.xm配置文件,將其納入Spring容器來管理,需要通過factory-method指定靜態方法名稱 xml
<bean id="random"
class="example.chapter3.StaticFactoryBean" factory-method="createRandom" //createRandom方法必須是static的,才能找到 scope="prototype"
/>
測試: java
public static void main(String[] args) {
//調用getBean()時,返回隨機數.如果沒有指定factory-method,會返回StaticFactoryBean的實例,即返回工廠Bean的實例 XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("config.xml")); System.out.println("我是IT學習者創建的實例:"+factory.getBean("random").toString());
}
```
3. 單例
保證一個類只有一個實例,並提供一個訪問他的全局訪問點
Spring單例模式值提供了一個全局訪問點BeanFactory,但是沒有從構造器級別去控制單例,這是因為Spring管理的是任意的對象
提示:Spring下默認的bean均為singleton,可以通過singleton=“true|false” 或者 scope=“?”來指定

  1. 適配器(Adapter)
    在Spring的Aop中,使用的Advice(通知)來增強被代理類的功能。Spring實現這一AOP功能的原理就使用代理模式(1、JDK動態代理。2、CGLib字節碼生成技術代理。)對類進行方法級別的切面增強,即,生成被代理類的代理類, 並在代理類的方法前,設置攔截器,通過執行攔截器重的內容增強了代理方法的功能,實現的面向切面編程。
    Adapter類接口:Target

public interface AdvisorAdapter {
boolean supportsAdvice(Advice advice);
MethodInterceptor getInterceptor(Advisor advisor);
}
/// MethodBeforeAdviceAdapter類,Adapter
class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {
public boolean supportsAdvice(Advice advice) {
return (advice instanceof MethodBeforeAdvice);
}
public MethodInterceptor getInterceptor(Advisor advisor) {
MethodBeforeAdvice advice = (MethodBeforeAdvice) advisor.getAdvice();
return new MethodBeforeAdviceInterceptor(advice);
}
}

5. 包裝器(Decorator)
spring的applicationContext中配置所有的dataSource,實現數據源的動態切換
如果項目連接多個數據庫,根據不同客戶或者不同請求去請求不同的數據庫,但是每個數據庫的數據源(dataSource)不同,根據需要要在DAO訪問sessionFactory的時候動態切換數據源,可以根據不同客戶或者不同請求設置dataSource,達到切換數據源目的

6. 代理模式(Proxy)
Spring的Proxy模式在aop中有體現,比如 JdkDynamicAopProxy 和 Cglib2AopProxy。

7. 觀察者(Observer)
定義對象間存在的一對多關系,一個對象修改時會通知其他對象。觀察者屬於行為模式;Spring中的監聽

8. 策略模式(Strategy)
定義一系列的算法,把它們一個個封裝起來,並且使它們可相互替換。滿足客戶日益增長的業務(貪婪)需求
Spring 的 SimpleInstantiationStrategy 使用了策略模式

9. 模板方法(Template Method)
定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟
以下是一個具體的例子: 
JdbcTemplate中的execute方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM