最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java spring webmvc如何實(shí)現(xiàn)控制反轉(zhuǎn)

 更新時(shí)間:2020年08月11日 10:26:48   作者:hongzhez  
這篇文章主要介紹了Java spring webmvc如何實(shí)現(xiàn)控制反轉(zhuǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

概述

本文基于示例的方式解釋控制反轉(zhuǎn),再看控制反轉(zhuǎn)之前,我們先看下常規(guī)控制流程,以數(shù)據(jù)庫(kù)訪問(wèn)為例

示例并沒(méi)有實(shí)際訪問(wèn)數(shù)據(jù),而是基于service和dao,模擬請(qǐng)求數(shù)據(jù)

創(chuàng)建項(xiàng)目

注意:本實(shí)例基于Idea開(kāi)發(fā)工具

打開(kāi)創(chuàng)建項(xiàng)目選項(xiàng)(New Project),選擇Maven,不要選擇“Create from crchetype”,點(diǎn)擊Next

GroupID:com.example和ArtifactID:Demo,點(diǎn)擊Next和Finish

新生成的項(xiàng)目目錄結(jié)構(gòu)如下:

  • src
  • main
  • java
  • resources
  • test
  • pom.xml

常規(guī)流程

main.java下面添加Package:com.example.dao

dao下面添加訪問(wèn)接口,同時(shí)添加兩種數(shù)據(jù)訪問(wèn)方式:

public interface UserDao {
  String getUser();
}
public class UserDaoMSSqlImpl implements UserDao {
  public String getUser() {
    return "從SQL Server查詢用戶";
  }
}
public class UserDaoMySqlImpl implements UserDao {
  public String getUser() {
    return "從MySQL查詢用戶";
  }
}

添加服務(wù)層

main.java下面添加Package:com.example.service

添加訪問(wèn)類

public interface UserService {
  void getUser();
}
public class UserServiceImpl implements UserService {
  // 如果想更換數(shù)據(jù)庫(kù),這個(gè)地方需要改一下
  private UserDao userDao = new UserDaoMSSqlImpl();

  public void getUser() {
    System.out.println(userDao.getUser());
  }
}

添加測(cè)試,在src.test下面添加UserTest

public class UserTest {
  public static void main(String[] args) {
    UserService userService = new UserServiceImpl();
    userService.getUser();
  }
}

從上面的例子中看到,如果想更改數(shù)據(jù)連接,必須修改代碼,也就是service類中,更新dao的初始化

控制反轉(zhuǎn)流程

項(xiàng)目pom.xml文件添加MVC依賴

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.8.RELEASE</version>
  </dependency>
</dependencies>

resources添加配置文件services.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
    https://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="mssqlImpl" class="com.example.dao.UserDaoMSSqlImpl"></bean>
  <bean id="mysqlImpl" class="com.example.dao.UserDaoMySqlImpl"></bean>

  <bean id="userServiceImpl" class="com.example.service.UserServiceImpl">
    <!-- 更新ref:mssqlImpl或mysqlImpl,即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)切換 -->
    <property name="userDao" ref="mysqlImpl"></property>
  </bean>
</beans>

改寫(xiě)UserServiceImpl類

public class UserServiceImpl implements UserService {
  private UserDao userDao;

  public void getUser() {
    System.out.println(userDao.getUser());
  }

  // 程序被動(dòng)接受入口,依賴注入就是利用set方法注入
  public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
  }
}

改寫(xiě)測(cè)試類型

public class UserTest {
  public static void main(String[] args) {
    // 獲取Spring上下文對(duì)象
    ApplicationContext context = new ClassPathXmlApplicationContext("services.xml");
    UserService userService1 = (UserService)context.getBean("userServiceImpl");
    userService1.getUser();
  }
}

從上面兩個(gè)示例里面看出:

常規(guī)流程的控制,程序相互的調(diào)用由代碼控制
控制反轉(zhuǎn)把控制權(quán)交給用戶,也就是由配置文件管理,程序本身不創(chuàng)建對(duì)象,變成被動(dòng)接受

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • maven搭建java ee項(xiàng)目圖文教程

    maven搭建java ee項(xiàng)目圖文教程

    這篇文章主要為大家詳細(xì)介紹了maven搭建java ee項(xiàng)目圖文教程,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Java?空和null的區(qū)別

    Java?空和null的區(qū)別

    本文主要介紹了Java?空和null的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Spring Boot Mybatis++ 2025詳解

    Spring Boot Mybatis++ 2025詳解

    文章介紹了三種基于注解SQL和查詢接口的MyBatis使用方式,討論了Entity和Example的區(qū)別,即Entity會(huì)更新所有字段,而Example僅更新非空字段,感興趣的朋友一起看看吧
    2025-02-02
  • SpringBoot 轉(zhuǎn)發(fā)請(qǐng)求至指定頁(yè)面的操作方法

    SpringBoot 轉(zhuǎn)發(fā)請(qǐng)求至指定頁(yè)面的操作方法

    這篇文章主要介紹了SpringBoot 轉(zhuǎn)發(fā)請(qǐng)求至指定頁(yè)面,需要使用@Controller,不可使用@RestController,@RestController相當(dāng)于@Controller和@ResponseBody合在一起的作用,本文通過(guò)實(shí)例代碼詳細(xì)講解,需要的朋友可以參考下
    2022-11-11
  • 基于java中的PO VO DAO BO POJO(詳解)

    基于java中的PO VO DAO BO POJO(詳解)

    下面小編就為大家?guī)?lái)一篇基于java中的PO VO DAO BO POJO(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java8之Lambda表達(dá)式使用解讀

    Java8之Lambda表達(dá)式使用解讀

    這篇文章主要介紹了Java8之Lambda表達(dá)式使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • HashMap之keyset()方法底層原理解讀

    HashMap之keyset()方法底層原理解讀

    這篇文章主要介紹了HashMap之keyset()方法底層原理解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SQL Server 2000 Driver for JDBC Service Pack 3 安裝測(cè)試方法

    SQL Server 2000 Driver for JDBC Service Pack 3 安裝測(cè)試方法

    這篇文章主要介紹了數(shù)據(jù)庫(kù)連接測(cè)試程序(SQL Server 2000 Driver for JDBC Service Pack 3 安裝測(cè)試),需要的朋友可以參考下
    2014-10-10
  • SpringBoot+Kotlin中使用GRPC實(shí)現(xiàn)服務(wù)通信的示例代碼

    SpringBoot+Kotlin中使用GRPC實(shí)現(xiàn)服務(wù)通信的示例代碼

    本文主要介紹了SpringBoot+Kotlin中使用GRPC實(shí)現(xiàn)服務(wù)通信的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java 添加、刪除、格式化Word中的圖片步驟詳解( 基于Spire.Cloud.SDK for Java )

    Java 添加、刪除、格式化Word中的圖片步驟詳解( 基于Spire.Cloud.SDK for Java )

    這篇文章主要介紹了Java 添加、刪除、格式化Word中的圖片( 基于Spire.Cloud.SDK for Java ),本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論

新化县| 邢台市| 平湖市| 修水县| 托克逊县| 耿马| 伊吾县| 建始县| 遂宁市| 巴里| 博爱县| 泰和县| 沅江市| 汶川县| 霍州市| 灵寿县| 司法| 宜君县| 新泰市| 垣曲县| 大关县| 遂溪县| 哈巴河县| 香格里拉县| 韩城市| 克什克腾旗| 林甸县| 前郭尔| 新疆| 松溪县| 泰顺县| 清河县| 城步| 定日县| 德钦县| 茶陵县| 平定县| 吉隆县| 平安县| 漳浦县| 疏勒县|