目录
1. 为啥要用 Spring
张三是一个编程小白,他每次在 service 层写代码都要自己 new 一堆 Dao 接口的实现类。
public class ProjectServiceImpl implements ProjectService {
UserDao userDao = new UserDaoImpl();
ProjectSectionDao projectSessionDao = new ProjectSessionDaoImpl();
ProjectDao projectDao = new ProjectDaoImpl();
SupplyDao supplyDao = new SupplyDaoImpl();
.......
}
复制代码
有一天正 new 着对象,张三心想:"我这一个 service 都需要 new 好多 Dao ,那如果有一堆 service ,那我不得花费好长时间?"
"有没有一个工具类或者什么框架能帮我管理这些对象?我只需要配置一下,需要的时候它就能自动帮我 new 个对象出来?"
张三陷入了深深的沉思之中。
张三的室友李四也是一个编程小白。
李四呢想给自己的小项目增加一个功能:记录方法执行的时间。结果他脑子一热竟然给所有的方法都增加了一堆打印方法:
System.out.println("项目开始执行");
// 开始时间
long start = System.currentTimeMillis();
// 业务代码
// 结束时间
long end = System.currentTimeMillis();
// 计算执行时间
System.out.printf("执行时间:%d 毫秒.", (end - start));
复制代码
过了半个小时,李四终于给项目中所有的方法都复制粘贴上了打印语句。他长舒一口气:"我真是个大聪明!"
张三看了一眼李四的代码,连连鼓掌:"妙啊!咱们宿舍的技术大神!"
旁边的王五实在忍不住了,对张三说:"妙个屁!最近的 Spring 框架课你俩是不是都没去?光顾着打游戏了?我都替你俩答了三次到了!"
李四问王五:"这个Spring 框架学了有用吗?"
王五:"不仅能解决张三说的管理对象的问题,还能帮你解决记录日志的问题。配置完 Spring ,你只需要定义一个切面类,根本不需要在一堆类上面复制粘贴一堆代码。"
张三摸摸后脑勺笑着说:"原来 Spring 框架那么好用,我以后再也不逃课了。我这就去翻课本学习 Spring 框架去。"
2. Spring 简介
Spring 是一个轻量级的 Java 开发框架。Spring 的核心是控制反转(IOC)和面向切面编程(AOP)。
Spring 主要有如下优点:
1.解耦
2.支持面向切面编程
3.便于集成其他框架
3. 环境搭建
1.创建 Maven 项目
File -> New -> Project -> Maven
2.引入依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.16.RELEASE</version>
</dependency>
</dependencies>
复制代码
3.创建接口和实现类
UserService
public interface UserService {
void print();
}
复制代码
UserServiceImpl
public class UserServiceImpl implements UserService{
@Override
public void print() {
System.out.println("hello world");
}
}
复制代码
4.创建配置文件
applicationContext.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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.xxl.service.impl.UserServiceImpl"/>
</beans>
复制代码
5.测试
@Test
public void testSpring(){
// 1、获取工厂
ApplicationContext act = new ClassPathXmlApplicationContext("/applicationContext.xml");
// 2、通过工厂类获得对象
UserService userService = (UserService)act.getBean("userService");
// 3.调用方法
userService.print();
}
复制代码
测试结果:
4. IOC
4.1 IOC 简介
IOC,全称 Inversion of Control,意思是控制反转。它是 Spring 框架中的一种思想。
控制反转就是将对象的控制权
从程序中的代码转移
到了 Spring 的工厂,通过 Spring 的工厂完成对象的创建以及赋值。
也就是说之前是我们自己 new 对象、给对象中的成员变量赋值。现在是让 Spring 来帮助我们创建对象、给成员变量赋值。
4.2 Spring 核心内容描述
1.配置文件
Spring 的配置文件可以放到项目中的任意一个地方,也可以随意命名,但是建议使用:applicationContext.xml。
你可以将这个配置文件看成一个装有一堆 bean 标签的容器。
2.bean 标签
Spring 工厂创建的对象,叫做 bean,所以一个 bean 标签代表一个对象。
<bean id="userService" class="com.xxl.service.impl.UserServiceImpl"/>
复制代码
bean 标签中必须要有 class 属性,它的值是一个类的全限定名(包名+类名)。
除了 c