欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java spring webmvc如何实现控制反转

程序员文章站 2022-04-25 18:16:59
概述本文基于示例的方式解释控制反转,再看控制反转之前,我们先看下常规控制流程,以数据库访问为例示例并没有实际访问数据,而是基于service和dao,模拟请求数据创建项目注意:本实例基于idea开发工...

概述

本文基于示例的方式解释控制反转,再看控制反转之前,我们先看下常规控制流程,以数据库访问为例

示例并没有实际访问数据,而是基于service和dao,模拟请求数据

创建项目

注意:本实例基于idea开发工具

打开创建项目选项(new project),选择maven,不要选择“create from crchetype”,点击next

groupid:com.example和artifactid:demo,点击next和finish

新生成的项目目录结构如下:

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

常规流程

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

dao下面添加访问接口,同时添加两种数据访问方式:

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查询用户";
  }
}

添加服务层

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

添加访问类

public interface userservice {
  void getuser();
}
public class userserviceimpl implements userservice {
  // 如果想更换数据库,这个地方需要改一下
  private userdao userdao = new userdaomssqlimpl();

  public void getuser() {
    system.out.println(userdao.getuser());
  }
}

添加测试,在src.test下面添加usertest

public class usertest {
  public static void main(string[] args) {
    userservice userservice = new userserviceimpl();
    userservice.getuser();
  }
}

从上面的例子中看到,如果想更改数据连接,必须修改代码,也就是service类中,更新dao的初始化

控制反转流程

项目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,即可实现数据库切换 -->
    <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());
  }

  // 程序被动接受入口,依赖注入就是利用set方法注入
  public void setuserdao(userdao userdao) {
    this.userdao = userdao;
  }
}

改写测试类型

public class usertest {
  public static void main(string[] args) {
    // 获取spring上下文对象
    applicationcontext context = new classpathxmlapplicationcontext("services.xml");
    userservice userservice1 = (userservice)context.getbean("userserviceimpl");
    userservice1.getuser();
  }
}

从上面两个示例里面看出:

常规流程的控制,程序相互的调用由代码控制
控制反转把控制权交给用户,也就是由配置文件管理,程序本身不创建对象,变成被动接受

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。