Spring框架及介紹控制反轉
什麼是Spring
Spring是一個開源框架,它由Rod Johnson建立。它是為了解決企業應用開發的複雜性而建立的。
Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。
然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。
目的:解決企業應用開發的複雜性
功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能
範圍:任何Java應用
簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。核心是控制反轉(IoC)和麵向切面(AOP)。
Spring的控制反轉(或依賴注入)
什麼是控制反轉
控制反轉(IoC=Inversion of Control)IoC,用白話來講,就是由容器控制程式之間的(依賴)關係,而非傳統實現中,由程式程式碼直接操控。這也就是所謂“控制反轉”的概念所在:(依賴)控制權由應用程式碼中轉到了外部容器,控制權的轉移,是所謂反轉。
IoC還有一個另外的名字:“依賴注入 (DI=Dependency Injection)” ,即由容器動態的將某種依賴關係注入到元件之中
簡單的說:就是將以前由程式設計師例項化物件/賦值的工作交給了spring處理
準備
1.在pom.xml中依賴jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.10.RELEASE</version> </dependency>
2、使用spring之前,可以在eclipse安裝外掛spring tool suite,專為Spring開發定製的,方便建立除錯執行維護Spring應用。
spring tool suite官方下載地址:http://spring.io/tools/sts/all
案例講解IOC的用途:
userAction 沒用spring之前是要例項化物件的,用了spring之後將例項化物件或賦值的工作交給spring處理,記得要實現setget方法
package com.zking.spring.ioc.web; import com.zking.spring.ioc.biz.UserBiz; import com.zking.spring.ioc.biz.impl.UserBizImpl; public class UserAction { // private UserBiz userBiz = new UserBizImpl();//x private UserBiz userBiz;//√ public UserBiz getUserBiz() { return userBiz; } public void setUserBiz(UserBiz userBiz) { this.userBiz = userBiz; } public void aaa() { this.userBiz.doSomething(); } public void bbb() { this.userBiz.doSomething(); } }
spring-context.xml 將例項化物件或賦值的工作交給spring處理
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
default-autowire="byName"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 講解IOC的用途 -->
<bean class="com.zking.spring.ioc.biz.impl.UserBizImpl" id="userBiz2"></bean>
<bean class="com.zking.spring.ioc.biz.impl.UserBizImpl2" id="userBiz"></bean>
<bean class="com.zking.spring.ioc.web.UserAction" id="userAction">
<property name="userBiz" ref="userBiz"></property>
</bean>
</beans>
測試: 通過spring自動建模獲取spring的上下文,獲取到工程中的所有類
package com.zking.ioc.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zking.spring.ioc.web.ClzAction;
import com.zking.spring.ioc.web.StudentAction;
import com.zking.spring.ioc.web.TeaAction;
import com.zking.spring.ioc.web.UserAction;
public class IocTest {
public static void main(String[] args) {
//通過建模獲取spring的上下文,獲取到工程中的所有類
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
UserAction userAction = (UserAction) applicationContext.getBean("userAction");
userAction.aaa();
}
總結IOC的用途:將例項化物件或賦值的工作交給spring處理
案例講解IOC注入的型別及方式
set注入 基本資料型別注入 集合注入 物件注入 構造注入 基本資料型別注入 自動裝配
........
studentAction
package com.zking.spring.ioc.web;
import java.util.List;
public class StudentAction {
private Integer sid;
private String sname;
private List<String> hobbies;
public StudentAction(Integer sid, String sname) {
super();
this.sid = sid;
this.sname = sname;
}
public StudentAction() {
}
public void ccc() {
System.out.println(this.sid+","+this.sname+","+this.hobbies);
}
public List<String> getHobbies() {
return hobbies;
}
public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies;
}
}
spring-context.xml
自動裝配一般byName用的多 default-autowire="byName"。
byType:根據管理的JavaBean的介面屬性,在spring的上下中自動尋找實現類去注入, 當找到兩個以上時會報錯,與spring的上下文的id圍觀 byName:根據管理的Javabean中的介面名,在上下文中去尋找同名的id,進行注入。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
default-autowire="byName"<!--注意了-->
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!--ioc注入的型別以及方式 -->
<bean class="com.zking.spring.ioc.web.StudentAction" id="stuAction">
<!--set方法注入 -->
<!-- <property name="sid" value="22"></property>
<property name="sname" value="包子"></property> -->
<!-- 構造方法 -->
<constructor-arg name="sid" value="38"></constructor-arg>
<constructor-arg name="sname" value="吃肥包"></constructor-arg>
<property name="hobbies">
<list>
<value>吃肉包</value>
<value>啊哈哈</value>
</list>
</property>
</bean>
<!-- spring的新特性自動裝配 -->
<!-- byType:根據管理的JavaBean的介面屬性,在spring的上下中自動尋找實現類去注入,
當找到兩個以上時會報錯,與spring的上下文的id圍觀
byName:根據管理的Javabean中的介面名,在上下文中去尋找同名的id,進行注入。
-->
<bean class="com.zking.spring.ioc.biz.impl.StuBizImpl" id="stuBizImpl"></bean>
<bean class="com.zking.spring.ioc.web.ClzAction" id="clzAction">
<!-- <property name="stuBiz" ref="stuBizImpl"></property>
<property name="userBiz" ref="userBiz"></property> -->
</bean>
</beans>