欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Spring框架簡介與Spring IOC詳解

 更新時(shí)間:2021年09月22日 10:58:26   作者:Tian.X、  
Spring 框架是一個(gè)輕量級的解決方案,可以一站式地構(gòu)建企業(yè)級應(yīng)用。它是為了解決 企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring 使用基本的 JavaBean 來完成以前只可能由 EJB 完成的事情。IOC 是 Inversion of Control 的縮寫,多數(shù)書籍翻譯成控制反轉(zhuǎn)

Spring簡介和配置

學(xué)習(xí)目標(biāo)

【應(yīng)用】能夠獨(dú)立完成springIOC的快速入門
【應(yīng)用】能夠掌握spring的bean標(biāo)簽的配置
【應(yīng)用】能夠獨(dú)立完成bean的對象屬性注入
【應(yīng)用】能夠獨(dú)立完成bean的普通屬性注入
【理解】能夠獨(dú)立完成bean的集合屬性注入

1、Spring概述

1.1 spring 是什么

在這里插入圖片描述

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

1.2 Spring發(fā)展歷程

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

在這里插入圖片描述

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

1.3 Spring的優(yōu)勢 (理解)

\1. 方便解耦,簡化開發(fā)

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

\2. AOP 編程的支持

通過 Spring的 AOP 功能,方便進(jìn)行面向切面編程,許多不容易用傳統(tǒng) OOP 實(shí)現(xiàn)的功能可以通過 AOP 輕松實(shí)現(xiàn)。
如 實(shí)現(xiàn)對程序進(jìn)行權(quán)限攔截、運(yùn)行監(jiān)控等功能

\3. 聲明式事務(wù)的支持

可以將我們從單調(diào)煩悶的事務(wù)管理代碼中解脫出來,通過聲明式方式靈活的進(jìn)行事務(wù)管理,提高開發(fā)效率和質(zhì)量。

\4. 方便程序的測試

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

\5. 方便集成各種優(yōu)秀框架

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

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

Spring 對JavaEE開發(fā)中非常難用的一些API(JDBC、JavaMail、遠(yuǎn)程調(diào)用等),都提供了封裝,使這些API應(yīng)用難度大大降低。

\7. Java 源碼是經(jīng)典學(xué)習(xí)范例

Spring的源代碼設(shè)計(jì)精妙、結(jié)構(gòu)清晰、匠心獨(dú)用,處處體現(xiàn)著大師對Java 設(shè)計(jì)模式靈活運(yùn)用以及對 Java技術(shù)的高深造詣。它的源代碼無意是 Java 技術(shù)的最佳實(shí)踐的范例。

1.4 Spring的體系結(jié)構(gòu)(了解)

在這里插入圖片描述

2、Spring IoC快速入門

2.1 IoC的概念和作用

IoC:控制反轉(zhuǎn)(Inversion Of Control) ,就是應(yīng)用本身不負(fù)責(zé)依賴對象的創(chuàng)建及維護(hù),依賴對象的創(chuàng)建及維護(hù)是由外部容器負(fù)責(zé)的。這樣控制權(quán)就由應(yīng)用轉(zhuǎn)移到了外部容器,控制權(quán)的轉(zhuǎn)移就是所謂反轉(zhuǎn)。

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

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

2.2 Spring IoC程序開發(fā)步驟

①導(dǎo)入 Spring 開發(fā)的基本包坐標(biāo)
②編寫 Dao 接口和實(shí)現(xiàn)類
③創(chuàng)建 Spring 核心配置文件
④在 Spring 配置文件中配置 UserDaoImpl
⑤使用 Spring 的 API 獲得 Bean 實(shí)例

2.3 導(dǎo)入Spring開發(fā)的基本包坐標(biāo)

<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接口和實(shí)現(xiàn)類

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 創(chuàng)建Spring核心配置文件

在類路徑 classpath 下(resources)創(chuàng)建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.6 在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">
<!‐‐ 實(shí)現(xiàn)IoC將對象的創(chuàng)建 交給spring容器
UserDao userDao = new UserDaoImpl();
‐‐>
<bean id="userDao" class="com.bailiban.dao.impl.UserDaoImpl"></bean>
</beans>

2.7 使用Spring的API獲得Bean實(shí)例

public class TestIoC{
public static void main(String[] args) {
// 創(chuàng)建spring容器實(shí)例
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
//從容器中獲取 bean 根據(jù) 唯一標(biāo)識id獲取
UserDao userDao = (UserDao) context.getBean("userDao");
userDao.save();
}
}

在類路徑下尋找配置文件來實(shí)例化容器
Spring快速入門代碼鞏固練習(xí)
練習(xí)下通過springIoC的 XML配置方式來進(jìn)行對象的實(shí)例化
\1. 導(dǎo)入坐標(biāo)
\2. 創(chuàng)建Bean
\3. 創(chuàng)建配置文件applicationContext.xml
\4. 在配置文件中進(jìn)行配置
\5. 創(chuàng)建ApplicationContext對象getBean

3、 Bean的依賴注入入門

① 編寫Dao,Service接口和實(shí)現(xiàn)類

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 的創(chuàng)建權(quán)交給 Spring

<
!‐‐ spring IoC 將對象的創(chuàng)建權(quán)交給spring‐‐>
<bean id="userDao" class="com.bailiban.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.bailiban.service.impl.UserServiceImpl"></bean>

UserService 內(nèi)部再調(diào)用 UserDao的save() 方法

public class UserServiceImpl implements UserService {
public void save() {
//創(chuàng)建spring容器實(shí)例
ApplicationContext context = new ClassPathXmlApplicationContext();
//根據(jù)id獲取dao對象
UserDao userDao = (UserDao) context.getBean("userDao");
//調(diào)用方法
userDao.save();
}
}

③從 Spring 容器中獲得 UserService 進(jìn)行操作

public class TestDI {
//測試 DI快速入門
@Test
public void test1() {
//創(chuàng)建spring容器實(shí)例
ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
//根據(jù)id獲取dao對象
UserService userService = (UserService) context.getBean("userService");
//調(diào)用方法
userService.save();
}
}

3.1 Bean的依賴注入分析

目前UserService實(shí)例和UserDao實(shí)例都存在與Spring容器中,當(dāng)前的做法是在容器外部獲得UserService實(shí)例和UserDao實(shí)例,然后在程序中進(jìn)行結(jié)合。

在這里插入圖片描述

因?yàn)閁serService和UserDao都在Spring容器中,而最終程序直接使用的是UserService,所以可以在Spring容器中,將UserDao設(shè)置到UserService內(nèi)部。

在這里插入圖片描述

3.2 Bean的依賴注入概念

DI : Dependency Injection 依賴注入 , 需要有 IoC的環(huán)境,Spring 創(chuàng)建對象的過程中,Spring 將對象依賴的屬性注入到對象。

在編寫程序時(shí),通過控制反轉(zhuǎn),把對象的創(chuàng)建交給了 Spring,但是代碼中不可能出現(xiàn)沒有依賴的情況。

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

3.3 Bean的依賴注入方式

怎么將UserDao怎樣注入到UserService內(nèi)部呢?

set方法

在UserServiceImpl中添加setUserDao方法

public class UserServiceImpl implements UserService {
// 定義dao成員變量
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} 
public void save() {
// //創(chuàng)建spring容器實(shí)例
// ApplicationContext context = new
ClassPathXmlApplicationContext("applicationContext.xml");
// //根據(jù)id獲取dao對象
// UserDao userDao = (UserDao) context.getBean("userDao");
// //調(diào)用方法
userDao.save();
}
}

配置Spring容器調(diào)用set方法進(jìn)行注入

<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命名空間注入本質(zhì)也是set方法注入,但比起上述的set方法注入更加方便,主要體現(xiàn)在配置文件中,如下:
首先,需要引入P命名空間:

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

其次,需要修改注入方式

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

3.4 Bean的依賴注入的數(shù)據(jù)類型

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

public class UserDaoImpl implements UserDao {
//普通數(shù)據(jù)類型的注入
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("用戶添加~~~~~");
}
} 
<bean id="userDao" class="com.bailiban.dao.impl.UserDaoImpl">
<!‐‐ 普通數(shù)據(jù)的注入 ‐‐>
<property name="name" value="旺財(cái)"></property>
<property name="age" value="18"></property>
</bean>

到此這篇關(guān)于Java Spring框架簡介與Spring IOC詳解的文章就介紹到這了,更多相關(guān)Spring IOC 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java操作excel表格詳解

    java操作excel表格詳解

    在日常工作中,對Excel工作表格的操作處理可是多的數(shù)不清楚,下面是java語言對其的操作,有需要的小伙伴可以參考下
    2021-10-10
  • Java正則表達(dá)式API Matcher類方法

    Java正則表達(dá)式API Matcher類方法

    這篇文章主要介紹了Java正則表達(dá)式API Matcher類方法,對Matcher類的一些有用方法進(jìn)行功能對它們進(jìn)行分組展開介紹,需要的朋友可以參考一下
    2022-06-06
  • 教你用Java實(shí)現(xiàn)一個(gè)簡單的代碼生成器

    教你用Java實(shí)現(xiàn)一個(gè)簡單的代碼生成器

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著如何用Java實(shí)現(xiàn)一個(gè)簡單的代碼生成器展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解步驟詳解

    Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解步驟詳解

    這篇文章主要介紹了Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解步驟,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java中多態(tài)的實(shí)現(xiàn)原理詳細(xì)解析

    Java中多態(tài)的實(shí)現(xiàn)原理詳細(xì)解析

    這篇文章主要介紹了Java中多態(tài)的實(shí)現(xiàn)原理詳細(xì)解析,多態(tài)是面向?qū)ο缶幊陶Z言的重要特性,它允許基類的指針或引用指向派生類的對象,而在具體訪問時(shí)實(shí)現(xiàn)方法的動態(tài)綁定,需要的朋友可以參考下
    2024-01-01
  • idea 列編輯模式取消的操作

    idea 列編輯模式取消的操作

    這篇文章主要介紹了idea 列編輯模式取消的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 詳解SpringBoot實(shí)現(xiàn)fastdfs防盜鏈功能的示例代碼

    詳解SpringBoot實(shí)現(xiàn)fastdfs防盜鏈功能的示例代碼

    我們可以通過fastdfs實(shí)現(xiàn)一個(gè)分布式文件系統(tǒng),如果fastdfs部署在外網(wǎng),那么任何一個(gè)人知道了上傳接口,就可以實(shí)現(xiàn)文件的上傳和訪問。那么如何阻止他人訪問我們fastdfs服務(wù)器上的文件呢?此處就需要使用fastdfs的防盜鏈功能,本文就來講講如何實(shí)現(xiàn)這一功能
    2022-10-10
  • Java分頁工具類及其使用(示例分享)

    Java分頁工具類及其使用(示例分享)

    本篇文章主要分享了Java分頁工具類及其使用的示例代碼,具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • Mybatis generator的使用全面解析

    Mybatis generator的使用全面解析

    這篇文章主要介紹了Mybatis generator的使用,非常不錯(cuò),具有參考借鑒價(jià)值,對mybatis generator的使用相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-09-09
  • mybatis-plus邏輯刪除與唯一約束沖突問題

    mybatis-plus邏輯刪除與唯一約束沖突問題

    本文探討了MyBatis-Plus邏輯刪除與唯一約束沖突的問題,分析了產(chǎn)生沖突的原因,并提出了解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11

最新評論