Spring 介紹簡單使用

一. 什麼是Spring

Spring 框架是一個開源的 Java 平臺,它最初是由 Rod Johnson 編寫的,並且於 2003 年 6 月首次在 Apache 2.0 許可下發布。

Spring 是輕量級的Java 開發框架,其基礎版本只有 2 MB 左右的大小。

Spring 的核心是控制反轉(IoC)和麪向切面(AOP)。

簡單來說,Spring 是一個分層的 JavaSE/EEfull-stack (一站式) 輕量級開源框架

 

1. 爲什麼說Spring是一個一站式的輕量級開源框架呢?

首先輕量級:不是指Spring框架的模塊少,數量很輕,而是指Spring框架的非侵入性,即對象可以不必依賴Spring的API類

其次,JavaEE開發可分成三層架構,針對JavaEE的三層結構,每一層Spring都提供了不同的解決技術。

  • WEB層:SpringMVC
  • 業務層:Spring的IoC
  • 持久層:Spring的JDBCTemplate (Spring的JDBC模板,ORM模板用於整合其他的持久層框架)

 

2. Spring的優點:

  • 方便解耦,簡化開發。

Spring就是一個大工廠,可以將所有對象的創建和依賴關係的維護,交給Spring管理。

  • AOP編程的支持

Spring提供面向切面編程,可以方便的實現對程序進行權限攔截、運行監控等功能。

  • 聲明式事務的支持

只需要通過配置就可以完成對事務的管理,而無須手動編程。

  • 方便程序的測試

Spring對Junit4支持,可以通過註解方便的測試Spring程序。

  • 方便集成各種優秀的框架

Spring不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如:Struts2、Hibernate、MyBatis、Quartz等)的直接支持。

  • 降低JavaEE API的使用難度

Spring對JavaEE開發中非常難用的一些API(JDBC、JavaMail、遠程調用等),都提供了封裝,使這些API應用難度大大降低。

  • Java 源碼是經典學習範例

      Spring的源碼設計精妙、結構清晰、匠心獨運,處處體現着大師對Java設計模式靈活運用以及對Java技術的高深造詣Spring框架源碼無疑是Java技術的最佳實踐範例。如果想在短時間內迅速提高自己的Java技術水平和應用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。

3. Spring框架的組成結構圖:

    

 

核心容器

核心容器由 spring-core,spring-beans,spring-context 和 spring-expression(SpEL,Spring表達式語言,Spring Expression Language)等模塊組成,它們的細節如下:

  • spring-core:提供了框架的基本組成部分,包括 IoC 和依賴注入功能。

  • spring-beans:提供 BeanFactory,工廠模式的微妙實現,它移除了編碼式單例的需要,並且可以把配置和依賴從實際編碼邏輯中解耦。

  • spring-context模塊建立在由core和 beans 模塊的基礎上建立起來的,它以一種類似於JNDI註冊的方式訪問對象。Context模塊繼承自Bean模塊,並且添加了國際化(比如,使用資源束)、事件傳播、資源加載和透明地創建上下文(比如,通過Servelet容器)等功能

  • spring-expression:提供了強大的表達式語言,用於在運行時查詢和操作對象圖。它是JSP2.1規範中定義的統一表達式語言的擴展,支持set和get屬性值、屬性賦值、方法調用、訪問數組集合及索引的內容、邏輯算術運算、命名變量、通過名字從Spring IoC容器檢索對象,還支持列表的投影、選擇以及聚合等。

 

二. Spring 入門案例:

步驟一: 導入Spring的核心jar包外,還要導入Spring支持的日誌Jar包log4jcommons-logging

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.0.8.RELEASE</version>
		</dependency>
		
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                        <version>1.2.17</version>
                </dependency>
	</dependencies>

   

步驟二:創建一個 model 類:

public class User {

	private int id;
	private String username;
	private String password;
    ...
}

步驟三:創建 Spring 的核心配置文件 applicationContext.xml

        注意:文件名和位置沒有固定要求,名稱可隨便寫,官方建議寫成 applicationContext.xml 。

每個 bean 可定義的屬性:

屬性 描述
class 這個屬性是強制性的,並且指定用來創建 bean 的 bean 類。
name 這個屬性指定唯一的 bean 標識符。在基於 XML 的配置元數據中,你可以使用 ID 和/或 name 屬性來指定 bean 標識符。
scope 這個屬性指定由特定的 bean 定義創建的對象的作用域,它將會在 bean 作用域的章節中進行討論。
constructor-arg 它是用來注入依賴關係的,並會在接下來的章節中進行討論。
properties 它是用來注入依賴關係的,並會在接下來的章節中進行討論。
autowiring mode 它是用來注入依賴關係的,並會在接下來的章節中進行討論。
lazy-initialization mode 延遲初始化的 bean 告訴 IoC 容器在它第一次被請求時,而不是在啓動時去創建一個 bean 實例。
initialization 方法 在 bean 的所有必需的屬性被容器設置之後,調用回調方法。它將會在 bean 的生命週期章節中進行討論。
destruction 方法 當包含該 bean 的容器被銷燬時,使用回調方法。它將會在 bean 的生命週期章節中進行討論。
<?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">
	
        <!--
		id - 自定義給類取一個名字(默認規定) 確保唯一性
		class - 對應類名 不能是抽象類或者接口		
		定義bean時 要保證有一個無參數的構造方法	
	-->
	<bean id="user" class="cn.jq.springdemo.model.User">
		<property name="username" value="admin" ></property>
		<property name="password" value="admin123" ></property>
	</bean>
</beans>

步驟四:測試類

	public static void main(String[] args) {
		// 1.初始化ioc容器(裝對象的容器)
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//2.從容器中獲得創建好的對象
		User user = context.getBean("user", User.class);
		System.out.println(user);
	}

------
User [id=0, username=admin, password=null]

 

ClassPathXmlApplicationContext 默認加載classpath路徑下的文件,只需指明對應文件的classpath路徑下的配置文件名字即可。

ClassPathXmlApplicationContext 也可以接收可變參數的構造函數。

FileSystemXmlApplicationContext : 該容器從 XML 文件中加載已被定義的 bean。在這裏,你需要提供給構造器 XML 文件的完整路徑。

WebXmlApplicationContext:該容器會在一個 web 應用程序的範圍內加載在 XML 文件中已被定義的 bean。

返回的都是一個 ApplicationContext (實際上ApplicationContext是一個接口), 即 Spring 的 IOC容器

ConfigurableApplicationContext 子接口, 提供了一些方法 close(), refresh(), 可以讓 ApplicationContext 刷新和關閉。

 

從容器中獲得創建好的對象:

三種方式

    1.  根據bean的id 獲得對象 需要強轉類型 , bean的id寫錯時 會拋出 NoSuchBeanDefinitionException

       User user1 = (User) context.getBean("user");

    2. 根據bean的class 獲得對象 要確保同一種類型的bean只能配置一個

        User user2 = context.getBean(User.class);

    3. 根據bean的 id+bean的class 獲得對象 要求id和類型一定要匹配正確

        User user3 = context.getBean("user", User.class);

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章