91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Java Spring框架與Spring IOC

發布時間:2021-09-24 17:25:18 來源:億速云 閱讀:128 作者:柒染 欄目:開發技術

如何理解Java Spring框架與Spring IOC,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

    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開發的基本包坐標

    <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接口和實現類

    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配置文件

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

    2.7 使用Spring的API獲得Bean實例

    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接口和實現類

    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

    <
    !‐‐ 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() 方法

    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 進行操作

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

    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方法進行注入

    <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命名空間:

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

    其次,需要修改注入方式

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

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

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

    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("用戶添加~~~~~");
    }
    }
    <bean id="userDao" class="com.bailiban.dao.impl.UserDaoImpl">
    <!‐‐ 普通數據的注入 ‐‐>
    <property name="name" value="旺財"></property>
    <property name="age" value="18"></property>
    </bean>

    看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    安化县| 锦屏县| 舞阳县| 稻城县| 罗田县| 桃江县| 寿阳县| 贵溪市| 石家庄市| 宣化县| 牟定县| 上饶市| 乌拉特前旗| 邹城市| 卢氏县| 西充县| 郓城县| 遵义县| 互助| 九龙坡区| 格尔木市| 枣庄市| 浦北县| 嵩明县| 皮山县| 加查县| 长顺县| 孝感市| 浦东新区| 苏尼特右旗| 芜湖县| 杨浦区| 孟村| 安乡县| 盘山县| 汽车| 竹山县| 武安市| 合川市| 门头沟区| 博爱县|