Spring源碼分析(一)預備篇=》基本知識儲備

1、Spring框架總體,各個部分spring

 

 

1.Spring Core Container 

Core 和 Beans 模塊是框架的基礎部分,提供 IoC (控制反轉)和依賴注入特性。 這裏的基礎 概念是 BeanFactory,它提供對 Factory 模式的經典實 現來消除對程序’性單例模式的須要,並真 正地容許你從程序邏輯中分離出依賴關係和配置

1.1 Core

主要包含 Spring 框架基本的核心工具類, Spring 的其餘組件都要用到這個包 裏的類, Core模塊是其餘組件的基本核心。

1.2 Beans

它包含訪問配置文件、建立和管理 bean 以及進行 Inversion of Control I Dependency Injection ( IoC/DI )操做相關的全部類

1.3 Context

模構建於 Core 和 Beans 模塊基礎之上,Context 模塊繼承了 Beans 的特性,爲 Spring 核 心提供了大量 擴展,添加了對國際化(例如資源綁定)、事件傳播、資源加載和對 Context 的透明創 建的支持。 Context 模塊同時也支持 J2EE 的一些特 性, ApplicationContext 接口是 Context 模塊的關鍵

BeanFacotry和ApplicationContext本質區別:(使用BeanFacotry的bean是延時加載的,ApplicationContext是非延時加載的)

1.4 Expression Language

模塊提供了強大的表達式語言,用於在運行時查詢和操縱對象。 它是 JSP 2.1 規範中定義的unifed expression language 的擴展。 該語言支持設直/獲取屬 性的值,屬性的分配,方法的調用,訪問數組上下文( accessiong the context of arrays )、 容器和索引器、邏輯和算術運算符、命名變量以及從Spring的 IoC 容器中根據名稱檢 索對象。 它也支持 list 投影、選擇和通常的 list 聚合

2.Spring Data Access/Integration

2.1)JDBC

模塊提供了一個 JDBC 抽象層,它能夠消除冗長的 JDBC 編碼和解析數據庫廠 商特有的錯誤代碼。這個模塊包含了 Spring 對 JDBC 數據訪問進行封裝的全部類
2.2)ORM 模塊爲流行的對象-關係映射 API,
如 JPA、 JDO、 Hibernate、 iBatis 等,提供了 一個交互層。 利用 ORM 封裝包,能夠混合使用全部 Spring 提供的特性進行 O/R 映射, 如前邊提到的簡單聲 明性事務管理。
2.3)OXM 模塊提供了一個對 ObjecνXML 映射實現的抽象層,Object/XML 映射實現包括 JAXB、 Castor、 XMLBeans、 JiBX 和 XStrearn
2.4)JMS ( Java Messaging Service )
模塊主要包含了 一些製造和消 費消息的特性。
2.5) Transaction
支持編程和聲明性的事務管理,這些事務類必須實現特定的接口,並 且對全部的 POJO 都適用

 

3.Spring Web

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

4.Spring AOP

4.1)Aspects 模塊提供了對 AspectJ 的集成支持。
4.2)Instrumentation 模塊提供了 class instrumentation 支持和 classloader 實現,使得能夠在特定的應用服務器上使用

5. Test

Test 模塊支持使用 JUnit 和 TestNG 對 Spring 組件進行測試
上圖各個模塊介

 

2、Spring容器繼承圖數據庫

 

其中BeanFactory、ApplicationContext、ClassPathXmlApplicationContext值得重點關注express

3、IOC的思想最核心的地方在於,資源不禁使用資源的雙方管理,而由不使用資源的第三方管理,這能夠帶來不少好處。編程

第一,資源集中管理,實現資源的可配置和易管理。第二,下降了使用資源雙方的依賴程度,也就是咱們說的耦合度數組

4、Spring IOC 容器底層註解使用(下一節開始講這個實現)服務器

1.配置bean框架

第一種方式:ide

<?xml version="1.0" encoding="GBK"?>  
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns="http://www.springframework.org/schema/beans"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">  
    <!-- 指定class屬性,經過構造方法建立Bean實例 -->  
    <bean id="person" class="com.mao.gouzao.Person">  
    </bean>  
</beans>  
public static void main( String[] args )
{
    ClassPathXmlApplicationContext ctx = new  ClassPathXmlApplicationContext("beans.xml");
    System.out.println(ctx.getBean("person"));
}    

第二種方式:工具

 

@Configuration
public class MainConfig {

    @Bean
    public Person person(){
        return new Person();
    }

}

 

注意: 經過@Bean的形式是使用的話, bean的默認名稱是方法名,若@Bean(value="bean的名稱")那麼bean的名稱是指定的測試

去容器中讀取Bean的信息(傳入配置類

 

public static void main( String[] args )
{
    AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(MainConfig.class);
    System.out.println(ctx.getBean("person"));
}

 未完待續....

相關文章
相關標籤/搜索