最新国产好看的视频,伊人天堂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),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

概述

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

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

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

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

打開創(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下面添加訪問接口,同時(shí)添加兩種數(shù)據(jù)訪問方式:

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

添加訪問類

public interface UserService {
  void getUser();
}
public class UserServiceImpl implements UserService {
  // 如果想更換數(shù)據(jù)庫,這個(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ù)庫切換 -->
    <property name="userDao" ref="mysqlImpl"></property>
  </bean>
</beans>

改寫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;
  }
}

改寫測(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ū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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)求至指定頁面的操作方法

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

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

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

    下面小編就為大家?guī)硪黄趈ava中的PO VO DAO BO POJO(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    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ù)庫連接測(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ù)通信的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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 ),本文分步驟通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論

三门县| 青龙| 抚宁县| 临潭县| 武邑县| 公主岭市| 桃江县| 宁陵县| 东明县| 济宁市| 广饶县| 金沙县| 澄江县| 夏津县| 宜良县| 资中县| 太原市| 余江县| 广河县| 阿勒泰市| 广河县| 东城区| 东平县| 河津市| 思茅市| 客服| 常州市| 安化县| 乌什县| 偏关县| 马边| 固安县| 泽州县| 浙江省| 始兴县| 博罗县| 陕西省| 蓬安县| 商城县| 枣强县| 潮安县|