
Spring是于2003 年興起的一個輕量級的Java 開源架構,它由Rod Johnson建立。傳統J2EE應用的開發效率低,Spring作為開源的中間件,提供J2EE應用的各層的解決方案,Spring貫穿了表現層、業務層及持久層,而不是僅僅專注于某一層的方案。可以說Spring是企業應用開發的“一站式(full-stack)”選擇。然而,Spring并不想取代那些已有的架構,而是與它們無縫地整合。
簡單來說,Spring是一個輕量級控制反轉(IoC)和面向切面(AOP)的容器架構。
Spring是什麼?
1、友善解耦,簡化開發
通過Spring提供的IoC容器,我們可以将對象之間的依賴關系交由Spring進行控制,避免寫死所造成的過度程式耦合。有了Spring,使用者不必再為單執行個體模式類、屬性檔案解析等這些很底層的需求編寫代碼,可以更專注于上層的應用。
2、AOP程式設計的支援
通過Spring提供的AOP功能,友善進行面向切面的程式設計,許多不容易用傳統OOP實作的功能可以通過AOP輕松應付。
3、聲明式事務的支援
在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和品質。
4、友善程式的測試
可以用非容器依賴的程式設計方式進行幾乎所有的測試工作,在Spring裡,測試不再是昂貴的操作,而是随手可做的事情。例如:Spring對Junit4支援,可以通過注解友善的測試Spring程式。
5、友善內建各種優秀架構
Spring不排斥各種優秀的開源架構,相反,Spring可以降低各種架構的使用難度,Spring提供了對各種優秀架構(如Struts、Hibernate、MyBatis 、Hessian、Quartz)等的直接支援。
6、降低Java EE API的使用難度
Spring對很多難用的Java EE API(如JDBC,JavaMail,遠端調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。
為什麼要使用Spring?
建立工程,導入jar包
核心包:bean、context、core、expression;
日志包:apache.commons.logging
引入限制:bean限制和引入主配置檔案頭;
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd ">
</beans>
applicationContent.xml
測試:将自定義對象由自己建立交由Spring管理
package com.Gary.bean;
public class User {
private Integer u_id;
private String u_username;
private String u_password;
public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
public String getU_username() {
return u_username;
}
public void setU_username(String u_username) {
this.u_username = u_username;
}
public String getU_password() {
return u_password;
}
public void setU_password(String u_password) {
this.u_password = u_password;
}
}
User.java
package com.Gary.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.Gary.bean.User;
public class HelloSpring {
@Test
public void Test1() {
User u = new User();
System.out.println("Test1()"+u);
}
//Spring是一個容器,它将幫助我們管理對象
@Test
public void Test2() {
//根據spring配置檔案擷取容器對象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//User u = ac.getBean(User.class);
//通過getBean擷取配置好的user對象,程式員向Spring容器要對象
User u = (User) ac.getBean("user");
System.out.println("Test2()"+u);
}
}
HelloSpring.java
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd ">
<bean name="user" class="com.Gary.bean.User">
</bean>
</beans>
applicationContext.xml
Spring-IoC | DI概念介紹:(要實作IOC依賴DI的支援)
IoC(Inversion of Control):反轉控制:将我們自己建立對象的工作交給Spring容器幫我們完成;
DI(Dependency Injection):依賴注入:将值通過配置的方式為變量初始化/指派(注入);
IOC的反轉:建立對象這份工作由我們自己執行反轉給spring幫我們執行;
IOC的控制:就是由spring幫我們負責建立銷毀對象,掌控對象的生命周期等,我們在需要使用對象的時候跟Spring申請即可;
IOC是一種程式設計思想,也是一種新的設計模式,它需要DI(依賴注入)技術的支援;
c)注入方式:set方法注入、構造注入、字段注入(不推薦);
d)注入類型:
i.值類型(value) – 八大基本資料類型;
ii.引用類型(ref) – String、自定義對象;
spring是一個容器,它将幫我們管理對象
傳統方式給u_id指派
@Test
public void Test1() {
User u = new User();
//傳統方式給u_id指派
u.setU_id(1);
System.out.println("Test1()"+u);
}
Spring給u_id指派
@Test
public void Test2() {
//根據spring配置檔案擷取容器對象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//User u = ac.getBean(User.class);
//通過getBean擷取配置好的user對象,程式員向Spring容器要對象
User u = (User) ac.getBean("user");
System.out.println("Test2()"+u);
}
<bean name="user" class="com.Gary.bean.User">
<!-- 為u_id注入了一個id為2的值 -->
<property name="u_id" value="2"></property>
</bean>
package com.Gary.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.Gary.bean.User;
public class HelloSpring {
@Test
public void Test1() {
User u = new User();
//傳統方式給u_id指派
u.setU_id(1);
System.out.println("Test1()"+u);
}
//Spring是一個容器,它将幫助我們管理對象
@Test
public void Test2() {
//根據spring配置檔案擷取容器對象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//User u = ac.getBean(User.class);
//通過getBean擷取配置好的user對象,程式員向Spring容器要對象
User u = (User) ac.getBean("user");
System.out.println("Test2()"+u);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd ">
<bean name="user" class="com.Gary.bean.User">
<!-- 為u_id注入了一個id為2的值 -->
<property name="u_id" value="2"></property>
</bean>
</beans>
使用Spring改造Servlet項目對象關系依賴圖
(如需轉載學習,請标明出處)