由於前幾日剛剛學完Spring的基礎,所以寫一篇博客整理一下相關的基礎知識。html
Spring 是一個輕量級的 DI / IoC 和 AOP 容器的開源框架,幫助分離項目組件之間的依賴關係。,來源於 Rod Johnson 在其著做《Expert one on one J2EE design and development》中闡述的部分理念和原型衍生而來。java
Spring:SE/EE開發的一站式框架。web
一站式框架:有EE開發的每一層解決方案。spring
WEB層 :SpringMVCexpress
Service層 :Spring的Bean管理,Spring聲明式事務apache
DAO層 :Spring的Jdbc模板,Spring的ORM模塊編程
非侵入式指應用程序代碼對框架的依賴最小化,即不須要用戶代碼引入框架代碼的信息,從類的編寫者角度來看,察覺不到框架的存在。tomcat
經過Spring提供的IoC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分程序耦合。有了Spring,用戶沒必要再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用。安全
AOP(Aspect Oriented Programming)面向切面編程。Spring提供了對AOP的支持,它容許將一些通用任務,如安全、事務、日誌等進行集中式處理,從而提升了程序的複用性。服務器
只須要經過配置就能夠完成對事務的管理,不須要手動編程。
Spring對Junit4支持,能夠經過註解方便的測試Spring程序。
Spring能夠下降各類框架的使用難度,Spring提供了對各類優秀框架(如Struts、Hibernate、Hessian、Quartz)等的直接支持。
Spring對不少難用的Java EE API(如JDBC、JavaMail、遠程調用等)提供了一個薄薄的封裝層,經過Spring的簡易封裝,這些Java EE API的使用難度大爲下降。
官方下載地址:https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring
選擇相應的版本下載就能夠了,注意:jdk1.7只能和spring4.0如下的包搭配使用,而你要是用Spring4.0以上的包就要用jdk1.8.0乃至以上的版本。
下面對照結構圖說一下每一個jar包的做用
spring4中的jar包一共有20個
Core部分包含4個模塊
AOP部分包含4個模塊
Data Access/Integration部分包含5個模塊
Web部分包含3個模塊
Test部分一個模塊
剩下的包是
除了Spring的包以外,在開發中還會用到一個依賴包,即
下載地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi
1 package spring_test1.pojo; 2 3 /** 4 * @author jyroy 5 * 6 */ 7 public class User { 8 private String name; 9 private int id; 10 11 public String getName() { 12 return name; 13 } 14 public void setName(String name) { 15 this.name = name; 16 } 17 public int getId() { 18 return id; 19 } 20 public void setId(int id) { 21 this.id = id; 22 } 23 @Override 24 public String toString() { 25 return "User [name=" + name + ", id=" + id + "]"; 26 } 27 }
編寫配置文件要作的就是將類交給Spring管理
在src目錄下新建Spring核心的配置文件applicationContext.xml
這個配置文件要怎麼寫呢?
首先要寫的,就是XML配置文件的約束,那約束怎麼寫呢?只要去 spring-framework-4.3.20.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html 目錄下找到相關的約束複製到xml中就能夠了,剩下要作的就是對於類的配置了。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:p="http://www.springframework.org/schema/p" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation=" 6 http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd"> 8 9 <!--Spring的入門的配置--> 10 <bean name="user" class="spring_test1.pojo.User"> 11 <property name="name" value="李東"/> 12 <property name="id" value="1007" /> 13 </bean> 14 15 </beans>
用到了ApplicationContext,它是一種經常使用的Spring核心容器。提供了完整的IOC服務支持,是管理Bean的工廠,主要負責初始化各類Bean,並調用Bran生命週期的方法,還包含對國際化、資源訪問、事件傳播等方面的支持。
建立ApplicationContext接口實例,一般有兩種方式:
1 package spring_test1.test; 2 3 import org.junit.Test; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 import spring_test1.pojo.User; 8 9 public class UserTest { 10 11 @Test 12 public void demo1() { 13 //建立Spring的工廠 14 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 15 //經過容器獲取user對象 16 User user = (User) applicationContext.getBean("user"); 17 System.out.println(user); 18 } 19 }
IOC (Inversion Of Control):控制反轉。這是一種設計思想,就是將本來在程序中手動建立對象的控制權,交由Spring框架來管理。
DI (Dependency Injection): 依賴注入。將對象依賴屬性(簡單值,集合,對象)經過配置設值給該對象。
上面的例子中,便應用了IOC和DI,這裏詳細的說一下。
能夠看到,咱們並無進行 new 實例化,可是仍是產生對象了,這就是利用了IOC容器,進行建立對象,其中 User user = (User) applicationContext.getBean("user"); 即是經過Spring容器獲取的實現類對象,而不是經過 new 關鍵字來建立user。
其中name和id的設置即是應用了依賴注入,經過set方法進行的基本數據類型的注入。
經過new關鍵字來實例化,建立對象。
Category c = new Category();
對象的生命週期由Spring來管理,而不須要經過顯式的new來實現。即控制權從原本在本身手裏,如今交給了Spring。
Category c = Spring產生。
這篇都是Spring介紹和一點點基礎。關於細節的地方沒有展開。我慢慢來。