文章目录
1. 简介
Spring就是一个轻量级的控制反转(IOC) 和面向切面编程(AOP)的框架!
Spring目的:解决企业应用开发的复杂性
2. IOC理论推导
传统new对象的逻辑开发:
dao—>daoImpl—>service—>serviceImpl
如果用户想要切换数据库实现,所有的主动权在程序员的手上,需要修改程序。
所以要控制反转:原来程序员的主动权要交给用户;需要对外暴露接口(set方法)
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法
(1)在pom.xml 中导入junit 测试依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
(2)在dao层创建接口,以及接口的实现类
- UserMapper接口
package com.zz.dao;
//关于用户的接口
public interface UserMapper {
public void getUser();
}
- 接口的实现类UserMapperImpl
package com.zz.dao.impl;
import com.zz.dao.UserMapper;
public class UserMapperImpl implements UserMapper {
public void getUser() {
System.out.println("获取用户数据");
}
}
- 接口的实现类UserMapperMysqlImpl
package com.zz.dao.impl;
import com.zz.dao.UserMapper;
public class UserMapperMysqlImpl implements UserMapper {
public void getUser() {
System.out.println("Myaql获取用户数据");
}
}
(3)同样在service层(调用dao层)创建接口,以及接口的实现类
- UserService接口
package com.zz.service;
//用户业务层,本质调用dao层(获取数据),然后在业务层执行操作
public interface UserService {
public void getUser();
}
- 接口的实现类UserServiceImpl
package com.zz.service.impl;
import com.zz.dao.UserMapper;
import com.zz.service.UserService;
public class UserServiceImpl implements UserService {
//调用dao层
private UserMapper userMapper;
//set方法 只需要对外提供接口 程序不用管理实现
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
public void getUser() {
userMapper.getUser();
}
}
(4)在test层,创建测试类
用户根据不同的需求进行修改测试类代码
- 调用UserMapperImpl实现类的方法
注释掉UserMapperMysqlImpl userMapper = new UserMapperMysqlImpl();这行代码即可
import com.zz.dao.impl.UserMapperImpl;
import com.zz.dao.impl.UserMapperMysqlImpl;
import com.zz.pojo.Hello;
import com.zz.pojo.Student;
import com.zz.service.impl.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//客户端
public class MyTest {
@Test
public void test1(){
//主动权交给用户 想用就去调用接口
UserMapperImpl userMapper = new UserMapperImpl();
//UserMapperMysqlImpl userMapper = new UserMapperMysqlImpl();
UserServiceImpl userService = new UserServiceImpl();
userService.setUserMapper(userMapper);
userService.getUser();
}
}
测试结果:
- 调用UserMapperMysqlImpl实现类的方法
注释掉UserMapperImpl userMapper = new UserMapperImpl();这行代码即可
import com.zz.dao.impl.UserMapperImpl;
import com.zz.dao.impl.UserMapperMysqlImpl;
import com.zz.pojo.Hello;
import com.zz.pojo.Student;
import com.zz.service.impl.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//客户端
public class MyTest {
@Test
public void test1(){
//主动权交给用户 想用就去调用接口
//UserMapperImpl userMapper = new UserMapperImpl();
UserMapperMysqlImpl userMapper = new UserMapperMysqlImpl();
UserServiceImpl userService = new UserServiceImpl();
userService.setUserMapper(userMapper);
userService.getUser();
}
}
测试结果:
3. HelloSpring
项目目录:
(1)在pom.xml 中导入spring-webmvc依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
(2)创建实体类 Hello
package com.zz.pojo;
public class Hello {
private String name;
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("Hello,"+name