Java spring webmvc如何实现控制反转
作者:hongzhez 发布时间:2023-03-12 06:35:56
标签:Java,spring,web,mvc,反转
概述
本文基于示例的方式解释控制反转,再看控制反转之前,我们先看下常规控制流程,以数据库访问为例
示例并没有实际访问数据,而是基于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();
}
}
从上面两个示例里面看出:
常规流程的控制,程序相互的调用由代码控制
控制反转把控制权交给用户,也就是由配置文件管理,程序本身不创建对象,变成被动接受
来源:https://www.cnblogs.com/honzhez/p/13418219.html
0
投稿
猜你喜欢
- 原来一直使用shiro做安全框架,配置起来相当方便,正好有机会接触下SpringSecurity,学习下这个。顺道结合下jwt,把安全信息管
- 在阻塞队里中,除了对元素进行增加和删除外,我们可以把元素的删除做一个延迟的处理,即使用DelayQueue的方法。本文就来和大家聊聊Java
- 目录项目地址示例图片项目结构机器人平滑碰撞其它特性使用打包文件项目文件声明主要代码项目地址https://github.com/SCNU-A
- 序列化一般应用与以下场景之中:1.永久性保存对象,把对象通过序列化字节流保存到本地文件中;2.通过序列化在网络中传输对象3.通过序列化在进程
- 引言一个复杂的分布式系统,用户发起一个请求,这个请求可能调用几十到几百个服务,经过很多业务层,而每个业务又是多个机器集群,一个请求具体被随机
- 一、前言环境:jdk 1.8,SpringCloud Greenwich.SR2。如题,springcloud config-client启
- ShardingSphereShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、
- spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现
- 本文需求实现了java通过方向键控制小球移动的具体过程,供大家参考,具体内容如下需求分析:第一 要画出一个小球第二 要能通过控制方向键控制它
- 一、实验目的1. 掌握输入输出流的总体结构;2. 掌握流的概念;3. 掌握FileInputStream类、FileOutputStream
- 1.将本地jar包放入本地仓库。只需执行如下命令即可:mvn install:install-file -Dfile=D:/demo/fib
- 一、基本概念(重要)Integer 是 int 的包装类,int 则是 java 的一种基本数据类型;Integer 变量必须实例化后才能使
- 最近在做一个项目,遇到了项目打成 war 包的一个问题,项目创建时选择的时 jar 包方式,后因项目部署要求,需要打成 war 包部署,遇到
- 简介:Springboot使用Mybatis&Mybatis-plus 两者文件映射配置略有不同,之前我用的是Mybatis,但公司
- package com.chase.test;import java.util.ArrayList;import java.util.Has
- 项目上线之后,如果日志打印的很模糊或者业务逻辑比较复杂,有时候无法定位具体的错误原因,因此可以通过IDEA远程代理进行Debug。线上的代码
- 具体详细介绍请看下文:在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择。本文使用Apache Jakarta Common
- 本文介绍了Spring Security 控制授权的方法,分享给大家,具体如下:使用授权方法进行授权配置每一个 Spring Securit
- 前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果。本来没
- 今天来了一个问题:软键盘无法弹出。分析后是因为系统判断当前有外接硬键盘,就会隐藏软键盘。但实际情况并不是这么简单,该问题只有在特定条件下偶现