一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Spring框架簡介與Spring IOC詳解

Java Spring框架簡介與Spring IOC詳解

2022-01-11 13:30Tian.X、 Java教程

Spring 框架是一個輕量級的解決方案,可以一站式地構建企業級應用。它是為了解決 企業應用開發的復雜性而創建的。Spring 使用基本的 JavaBean 來完成以前只可能由 EJB 完成的事情。IOC 是 Inversion of Control 的縮寫,多數書籍翻譯成控制

Spring簡介和配置

學習目標

【應用】能夠獨立完成springIOC的快速入門
【應用】能夠掌握spring的bean標簽的配置
【應用】能夠獨立完成bean的對象屬性注入
【應用】能夠獨立完成bean的普通屬性注入
【理解】能夠獨立完成bean的集合屬性注入

1、Spring概述

1.1 spring 是什么

Java Spring框架簡介與Spring IOC詳解

Spring是分層的 Java SE/EE應用 full-stack 輕量級開源框架,以 IoC(Inverse Of Control:反轉控制)和AOP(Aspect Oriented Programming:面向切面編程)為內核。
提供了表現層 SpringMVC和持久層 Spring JDBCTemplate以及業務層事務管理等眾多的企業級應用技術,還能整合開源世界眾多著名的第三方框架和類庫,逐漸成為使用最多的Java EE 企業應用開源框架。

1.2 Spring發展歷程

1997 年, IBM提出了EJB 的思想
1998 年,SUN制定開發標準規范 EJB1.0
1999 年,EJB1.1 發布
2001 年,EJB2.0 發布
2003 年,EJB2.1 發布
2006 年,EJB3.0 發布
Rod Johnson 羅賓·約翰遜( Spring 之父)

Java Spring框架簡介與Spring IOC詳解

Expert One-to-One J2EE Design and Development(2002) 闡述了 J2EE 使用EJB 開發設計的優點及解決方案
Expert One-to-One J2EE Development without EJB(2004) 闡述了 J2EE 開發不使用 EJB的解決方式(Spring 雛
形)
2021 年 7 月份發布了 Spring 的最新版本 Spring 5.3.9 通用版(正式發布的版本)

1.3 Spring的優勢 (理解)

\1. 方便解耦,簡化開發

Spring 就是一個大工廠(IoC容器),可以將所有對象的創建和依賴關系的維護工作都交給 Spring 容器管理,大大地降低了組件之間的耦合性。

\2. AOP 編程的支持

通過 Spring的 AOP 功能,方便進行面向切面編程,許多不容易用傳統 OOP 實現的功能可以通過 AOP 輕松實現。
如 實現對程序進行權限攔截、運行監控等功能

\3. 聲明式事務的支持

可以將我們從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活的進行事務管理,提高開發效率和質量。

\4. 方便程序的測試

Spring對Junit4支持,可以通過注解方便的測試Spring程序,測試不再是昂貴的操作,而是隨手可做的事情。

\5. 方便集成各種優秀框架

Spring不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持。

\6. 降低 JavaEE API 的使用難度

Spring 對JavaEE開發中非常難用的一些API(JDBC、JavaMail、遠程調用等),都提供了封裝,使這些API應用難度大大降低。

\7. Java 源碼是經典學習范例

Spring的源代碼設計精妙、結構清晰、匠心獨用,處處體現著大師對Java 設計模式靈活運用以及對 Java技術的高深造詣。它的源代碼無意是 Java 技術的最佳實踐的范例。

1.4 Spring的體系結構(了解)

Java Spring框架簡介與Spring IOC詳解

2、Spring IoC快速入門

2.1 IoC的概念和作用

IoC:控制反轉(Inversion Of Control) ,就是應用本身不負責依賴對象的創建及維護,依賴對象的創建及維護是由外部容器負責的。這樣控制權就由應用轉移到了外部容器,控制權的轉移就是所謂反轉。

簡單理解:把對象的創建、初始化、銷毀等工作交給spring容器來做。由spring容器控制對象的生命周期。

明確 IoC的作用:削減計算機程序的耦合(解除我們代碼中的依賴關系)。
原來:我們在獲取對象時,都是采用 new 的方式。 是主動的。
現在:我們獲取對象時,跟spring容器要,有spring為我們查找或者創建對象。 是被動的。

2.2 Spring IoC程序開發步驟

①導入 Spring 開發的基本包坐標
②編寫 Dao 接口和實現類
③創建 Spring 核心配置文件
④在 Spring 配置文件中配置 UserDaoImpl
⑤使用 Spring 的 API 獲得 Bean 實例

2.3 導入Spring開發的基本包坐標

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>

2.4 編寫Dao接口和實現類

?
1
2
3
4
5
6
7
8
9
10
11
12
package com.summer.dao;
public interface UserDao {
public void save();
}
 
package com.summer.dao.impl;
import com.summer.dao.UserDao;
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("用戶添加~~~~~");
}
}

2.5 創建Spring核心配置文件

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

?
1
2
3
4
5
6
<?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.6 在Spring配置文件中配置UserDaoImpl

?
1
2
3
4
5
6
7
8
9
10
<?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">
<!‐‐ 實現IoC將對象的創建 交給spring容器
UserDao userDao = new UserDaoImpl();
‐‐>
<bean id="userDao" class="com.bailiban.dao.impl.UserDaoImpl"></bean>
</beans>

2.7 使用Spring的API獲得Bean實例

?
1
2
3
4
5
6
7
8
9
10
public class TestIoC{
public static void main(String[] args) {
// 創建spring容器實例
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
//從容器中獲取 bean 根據 唯一標識id獲取
UserDao userDao = (UserDao) context.getBean("userDao");
userDao.save();
}
}

在類路徑下尋找配置文件來實例化容器
Spring快速入門代碼鞏固練習
練習下通過springIoC的 XML配置方式來進行對象的實例化
\1. 導入坐標
\2. 創建Bean
\3. 創建配置文件applicationContext.xml
\4. 在配置文件中進行配置
\5. 創建ApplicationContext對象getBean

3、 Bean的依賴注入入門

① 編寫Dao,Service接口和實現類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
public void save() {
System.out.println("用戶添加~~~~~");
}
}
public interface UserService {
public void save();
}
public class UserServiceImpl implements UserService {
public void save() {
//TODO
}
}

②將UserDaoImpl 、 UserServiceImpl 的創建權交給 Spring

?
1
2
3
4
<
!‐‐ spring IoC 將對象的創建權交給spring‐‐>
<bean id="userDao" class="com.bailiban.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.bailiban.service.impl.UserServiceImpl"></bean>

UserService 內部再調用 UserDao的save() 方法

?
1
2
3
4
5
6
7
8
9
10
public class UserServiceImpl implements UserService {
public void save() {
//創建spring容器實例
ApplicationContext context = new ClassPathXmlApplicationContext();
//根據id獲取dao對象
UserDao userDao = (UserDao) context.getBean("userDao");
//調用方法
userDao.save();
}
}

③從 Spring 容器中獲得 UserService 進行操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class TestDI {
//測試 DI快速入門
@Test
public void test1() {
//創建spring容器實例
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
//根據id獲取dao對象
UserService userService = (UserService) context.getBean("userService");
//調用方法
userService.save();
}
}

3.1 Bean的依賴注入分析

目前UserService實例和UserDao實例都存在與Spring容器中,當前的做法是在容器外部獲得UserService實例和UserDao實例,然后在程序中進行結合。

Java Spring框架簡介與Spring IOC詳解

因為UserService和UserDao都在Spring容器中,而最終程序直接使用的是UserService,所以可以在Spring容器中,將UserDao設置到UserService內部。

Java Spring框架簡介與Spring IOC詳解

3.2 Bean的依賴注入概念

DI : Dependency Injection 依賴注入 , 需要有 IoC的環境,Spring 創建對象的過程中,Spring 將對象依賴的屬性注入到對象。

在編寫程序時,通過控制反轉,把對象的創建交給了 Spring,但是代碼中不可能出現沒有依賴的情況。

IoC解耦只是降低他們的依賴關系,但不會消除。例如:業務層仍會調用持久層的方法。
那這種業務層和持久層的依賴關系,在使用 Spring 之后,就讓 Spring 來維護了。
簡單的說,就是坐等框架把持久層對象傳入業務層,而不用我們自己去獲取。

3.3 Bean的依賴注入方式

怎么將UserDao怎樣注入到UserService內部呢?

set方法

在UserServiceImpl中添加setUserDao方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class UserServiceImpl implements UserService {
// 定義dao成員變量
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
// //創建spring容器實例
// ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
// //根據id獲取dao對象
// UserDao userDao = (UserDao) context.getBean("userDao");
// //調用方法
userDao.save();
}
}

配置Spring容器調用set方法進行注入

?
1
2
3
4
5
6
7
<bean id="userDao" class="com.bailiban.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.bailiban.service.impl.UserServiceImpl">
<!‐‐使用set方法注入
name: set方法去掉set后 首字母小寫
‐‐>
<property name="userDao" ref="userDao"></property>
</bean>

set方法:P命名空間注入
P命名空間注入本質也是set方法注入,但比起上述的set方法注入更加方便,主要體現在配置文件中,如下:
首先,需要引入P命名空間:

?
1
xmlns:p="http://www.springframework.org/schema/p"

其次,需要修改注入方式

?
1
2
<bean id="userService" class="com.bailiban.service.impl.UserServiceImpl" p:userDao‐
ref="userDao">

3.4 Bean的依賴注入的數據類型

上面的操作,都是注入的引用Bean,除了對象的引用可以注入,普通數據類型 等都可以在容器中進行注入。
注入數據的二種數據類型
1.普通數據類型
2.引用數據類型
其中引用數據類型,此處就不再贅述了,之前的操作都是對UserDao對象的引用進行注入的,下面將以set方法注入為例,演示普通數據類型的注入。
Bean的依賴注入的數據類型
(1)普通數據類型的注入
練習:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class UserDaoImpl implements UserDao {
//普通數據類型的注入
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void save() {
System.out.println(name+"‐‐‐"+age);
System.out.println("用戶添加~~~~~");
}
}
?
1
2
3
4
5
<bean id="userDao" class="com.bailiban.dao.impl.UserDaoImpl">
<!‐‐ 普通數據的注入 ‐‐>
<property name="name" value="旺財"></property>
<property name="age" value="18"></property>
</bean>

到此這篇關于Java Spring框架簡介與Spring IOC詳解的文章就介紹到這了,更多相關Spring IOC 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/xt623/article/details/120155739

延伸 · 閱讀

精彩推薦
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 九二淫黄大片看片 | 午夜秀场在线观看 | 2020韩国三级理论在线观看 | 日本片免费观看一区二区 | 国产一区二区三区日韩 | 国产精品免费_区二区三区观看 | 憋尿调教绝望之岛 | bdsm酷刑折磨死美女 | 91成人免费观看 | 国产网站免费在线观看 | 欧美日韩一区二区三区免费 | 欧美高清3dfreexxxx性 | 日韩在线一区二区三区免费视频 | 国产精品va在线观看手机版 | 国产欧美视频一区二区三区 | 5g影院成人| 欧美日韩一区二区三区免费不卡 | 国产精品视频免费观看 | 性色AV一区二区三区V视界影院 | 亚洲 日韩 国产 中文视频 | 日韩理论在线观看 | 石原莉奈adn093店长未婚妻 | 亚洲AV无码专区国产乱码网站 | 成人性色生活片免费网 | 欧美综合影院 | 无耻之徒第十一季在线观看 | 和两个男人玩3p好爽视频 | 欧美日本一道高清二区三区 | 91香蕉国产| 成在线人免费 | 日本人妖视频 | 啪一啪日一日 | mm131亚洲精品久久 | 国产青草视频在线观看免费影院 | 免费高清特黄a 大片 | 大好硬好深好爽想要视频 | 亚洲2017久无码 | b片在线观看 | 日韩欧美综合在线二区三区 | 欧美四区| 狠狠干狠狠插 |