当前位置: 移动技术网 > IT编程>开发语言>Java > Java spring webmvc如何实现控制反转

Java spring webmvc如何实现控制反转

2020年08月15日  | 移动技术网IT编程  | 我要评论

概述

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

示例并没有实际访问数据,而是基于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();
  }
}

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网