介紹web
spring是一個輕量級的Java 開發框架。實現了 高內聚,低耦合;支持AOP(面向切面),控制反轉(IOC)也叫依賴注入(Dependency lnjection),聲明事務 整合其它ORM框架 等spring
IOC,控制反轉(依賴注入,依賴查找): 應用自己不負責依賴對象的建立及維護,依賴對象的建立及維護是由外部容器負責的,控制權就由應用轉移到了外部容器,控制權的轉移就是控制反轉。數據庫
依賴注入(Dependency lnjection) 在運行期間,由外部容器動態的將依賴對象注入到組件中數組
bean:全部的實例,對象 在IOC容器中都能稱之爲bean安全
Spring主要的優勢
1.低侵入式設計,代碼的污染率。
2.控制反轉(Ioc)機制,也叫依賴注入(DI),下降了業務對象替換的複雜性,提升了組件之間的解耦。
3.面向切面(AOP),容許將一些通用的任務如安全、事務、日誌等進行集中式處理,從而提供了更好的複用。
4.Spring的ORM 和 DAO 提供了與第三方持久層框架的良好整合,並簡化了底層的數據庫訪問。
5.獨立於各類應用服務器,基於Spring框架的應用程序,能夠實現Write Once,Run Anywhere的承諾。
6.Spring並不強制應用徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有
服務器
在pom.xml中 添加 maven依賴session
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> </dependencies>
spring配置模板app
<?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"> <!-- spring配置文件 --> <bean id="方法名" class="包名.類名"></bean> </beans>
實例化spring容器
Spring的配置文件能夠指定多個,經過string數組傳入框架
1.在類路徑下尋找配置來實例化容器
AppplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});maven
2.在文件系統路徑下尋找配置文件來實例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{"d:\\beans.xml"});
實例化bean
1.使用類構造器實例化
<bean id="carService" class="com.serviceImpl.CarServiceBean"></bean>
2.使用靜態工廠方法實例化
<bean id="carService2" class="test.CarServiceBeanFactory" factory-method="createCarBean"></bean>
public class CarServiceBeanFactory {
public static CarServiceBean createCarBean(){
return new CarServiceBean();
}
}
3.使用實例化工廠方法實例化
<bean id="carService" class="test.CarServiceBeanFactory"></bean>
<bean id="carService3" factory-bean="carService" factory-method="createCarBean2"></bean>
public class CarServiceBeanFactory {
public CarServiceBean createCarBean2(){
return new CarServiceBean();
}
}
在每一個spring IOC容器中一個bean定義只有一個對象實例。默認狀況下會在容器啓動初始化bean,
但能夠指定bean節點lazy-init="true"延遲初始化bean,這時 只有第一次獲取bean會初始化bean
若是想對全部bean都啓用應用延遲初始化,可在根節點bean設置 default-lazy-init="true"
bean做用域
singleton | (單例模式,默認) 在整個springIOC容器中,使用singleton定義的bean將只有一個實例 |
prototype | 原形模式,每次經過容器的getBean方法獲取prototype定義的bean,都會產生一個新的bean實例 |
request | 對於每次HTTP請求,使用request定義的Bean都將產生一個新的實例,每次HTTP請求都將產生不一樣的Bean實例,該做用域僅在給予web的Spring ApplicationContext情形下有效 |
session | 對於每次HTTP Session ,使用session定義的Bean都將產生一個新實例,該做用域僅在給予web的Spring ApplicationContext情形下有效 |
global session | 每一個全局得HTTP Session對應一個Bean實例,該做用域僅在給予web的Spring ApplicationContext情形下有效 |
spring依賴注入方式:set注入,構造器注入,靜態工廠注入,實例工廠注入 (只寫用的最多的注入方式)
set注入:
package com.dao; public interface CarDao { public void append(String arg); }
package com.dao.Impl; import com.dao.CarDao; public class CarDaoImpl implements CarDao { //數據庫保存操做層 public void append(String args) { System.out.println("CarDaoImpl"+args); } }
package com.service; public interface CarService { public void add(String args); }
package com.serviceImpl; import com.dao.CarDao; import com.service.CarService; public class CarServiceImpl implements CarService { private CarDao carDao; public CarDao getCarDao() { return carDao; } //注入 public void setCarDao(CarDao carDao) { this.carDao = carDao; } @Override public void add(String args) { // 業務操做層 System.out.println("CarServiceImpl"+args); args = args+":"+this.hashCode(); carDao.append(args); } }
package com.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.service.CarService; public class RunTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); CarService carService = (CarService) context.getBean("carServer"); carService.add("test"); } }
<?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"> <bean id="carServer" class="com.serviceImpl.CarServiceImpl"> <property name="carDao" ref="carBean"></property> </bean> <bean id = "carBean" class="com.dao.Impl.CarDaoImpl"></bean> </beans>
構造器注入:
修改兩處就好了
<?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"> <bean id="carServer" class="com.serviceImpl.CarServiceImpl"> <constructor-arg name="carDao" ref="carBean"></constructor-arg> </bean> <bean id = "carBean" class="com.dao.Impl.CarDaoImpl"></bean> </beans>
package com.serviceImpl; import com.dao.CarDao; import com.service.CarService; public class CarServiceImpl implements CarService { private CarDao carDao; public CarServiceImpl(CarDao carDao) { this.carDao = carDao; } /* public CarDao getCarDao() { return carDao; } //注入 public void setCarDao(CarDao carDao) { this.carDao = carDao; } */ @Override public void add(String args) { // 業務操做層 System.out.println("CarServiceImpl"+args); args = args+":"+this.hashCode(); carDao.append(args); } }