Spring是分層的 Java SE/EE應用 full-stack 輕量級開源框架,以 IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面編程)爲內核。spring
提供了展示層 SpringMVC和持久層 Spring JDBCTemplate以及業務層事務管理等衆多的企業級應用技術,還能整合開源世界衆多著名的第三方框架和類庫,逐漸成爲使用最多的Java EE 企業應用開源框架express
IOC AND AOP:編程
IOC:inverse of controll控制反轉 將原來在代碼層次實例化bean,以及管理 bean的依賴關係反轉到spring容器中進行管理的過程,叫控制反轉.session
DI:dependency injection 依賴注入 它是IOC的一個重要組成部分,經過spring容器管理程序中組件之間的依賴和注入。app
Rod Johnson ( Spring 之父)框架
2017 年 9 月份發佈了 Spring 的最新版本 Spring5.0 通用版(GA)ide
方便解耦,簡化開發函數
AOP 編程的支持測試
聲明式事務的支持spa
方便程序的測試
①導入 Spring 開發的基本包座標
②編寫 Dao 接口和實現類
③建立 Spring 核心配置文件
④在 Spring 配置文件中配置 UserDaoImpl
⑤使用 Spring 的 API 得到 Bean 實例
<properties>
<spring.version>5.0.5.RELEASE</spring.version>
</properties>
<!--導入spring的context座標,context依賴core、beans、expression-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("UserDao save method running....");
}
}
<?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">
</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="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
</beans>
@Test
public void test1(){
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save();
用於配置對象交由Spring 來建立。
默認狀況下它調用的是類中的無參構造函數,若是沒有無參構造函數則不能建立成功。
基本屬性:
id:Bean實例在Spring容器中的惟一標識
class:Bean的全限定名稱
scope:指對象的做用範圍,取值以下:
取值範圍 | 說明 |
---|---|
singleton | 默認值,單例的 |
prototype | 多例的 |
request | WEB 項目中,Spring 建立一個 Bean 的對象,將對象存入到 request 域中 |
session | WEB 項目中,Spring 建立一個 Bean 的對象,將對象存入到 session 域中 |
global session | WEB 項目中,應用在 Portlet 環境,若是沒有 Portlet 環境那麼globalSession 至關於 session |
}
1)當scope的取值爲singleton時
Bean的實例化個數:1個
Bean的實例化時機:當Spring核心文件被加載時,實例化配置的Bean實例
Bean的生命週期:
對象建立:當應用加載,建立容器時,對象就被建立了
對象運行:只要容器在,對象一直活着
對象銷燬:當應用卸載,銷燬容器時,對象就被銷燬了
2)當scope的取值爲prototype時
Bean的實例化個數:多個
Bean的實例化時機:當調用getBean()方法時實例化Bean
對象建立:當使用對象時,建立新的對象實例
對象運行:只要對象在使用中,就一直活着
對象銷燬:當對象長時間不用時,被 Java 的垃圾回收器回收了
init-method:指定類中的初始化方法名稱
destroy-method:指定類中銷燬方法名稱
1) 使用無參構造方法實例化
它會根據默認無參構造方法來建立類對象,若是bean中沒有默認無參構造函數,將會建立失敗
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
2) 工廠靜態方法實例化
工廠的靜態方法返回Bean實例
public class StaticFactoryBean {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="userDao" class="com.itheima.factory.StaticFactoryBean"
工廠的非靜態方法返回Bean實例
public class DynamicFactoryBean {
public UserDao createUserDao(){
return new UserDaoImpl();
}
}
<bean id="factoryBean" class="com.itheima.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
①建立 UserService,UserService 內部在調用 UserDao的save() 方法
public class UserServiceImpl implements UserService {
②將 UserServiceImpl 的建立權交給 Spring