Spring IOC&DI

1. spring概述

1.1 Spring是什麼(理解)

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

1.2 Spring發展歷程 (瞭解)

Rod Johnson ( Spring 之父)框架

2017 年 9 月份發佈了 Spring 的最新版本 Spring5.0 通用版(GA)ide

1.3 Spring的優點(理解)

方便解耦,簡化開發函數

AOP 編程的支持測試

聲明式事務的支持spa

方便程序的測試

1.4 Spring的體系結構(瞭解)

 

2. spring快速入門

2.1 Spring程序開發步驟

①導入 Spring 開發的基本包座標

②編寫 Dao 接口和實現類

③建立 Spring 核心配置文件

④在 Spring 配置文件中配置 UserDaoImpl

⑤使用 Spring 的 API 得到 Bean 實例

2.2 導入Spring開發的基本包座標

<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>

2.3 編寫Dao接口和實現類

public interface UserDao {
public void save();
}

public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("UserDao save method running....");
}
}

2.4 建立Spring核心配置文件

在類路徑下(resources)建立applicationContext.xml配置文件

<?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>

2.5 在Spring配置文件中配置UserDaoImpl

<?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>

2.6 使用Spring的API得到Bean實例

@Test
public void test1(){
ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao"); userDao.save();

3. Spring配置文件

3.1 Bean標籤基本配置

用於配置對象交由Spring 來建立。

默認狀況下它調用的是類中的無參構造函數,若是沒有無參構造函數則不能建立成功。

基本屬性:

id:Bean實例在Spring容器中的惟一標識

class:Bean的全限定名稱

3.2 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 的垃圾回收器回收了

3.3 Bean生命週期配置

init-method:指定類中的初始化方法名稱

destroy-method:指定類中銷燬方法名稱

3.4 Bean實例化三種方式

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"

3) 工廠實例方法實例化

工廠的非靜態方法返回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"/>

3.5 Bean的依賴注入入門

①建立 UserService,UserService 內部在調用 UserDao的save() 方法

public class UserServiceImpl implements UserService {
@Override
public void save() {
        ApplicationContext applicationContext = new
                ClassPathXmlApplicationContext("applicationContext.xml");                 UserDao userDao = (UserDao) applicationContext.getBean("userDao");
         userDao.save();
}
}

②將 UserServiceImpl 的建立權交給 Spring

相關文章
相關標籤/搜索