前言
随着 Spring
的崛起以及其功能的完善,现在可能绝大部分项目的开发都是使用 Spring(全家桶)
来进行开发,Spring
也确实和其名字一样,是开发者的春天,Spring
解放了程序员的双手,而等到 SpringBoot
出来之后配置文件大大减少,更是进一步解放了程序员的双手,但是也正是因为Spring
家族产品的强大,使得我们习惯了面向 Spring
开发,那么假如有一天没有了 Spring
,是不是感觉心里一空,可能一下子连最基本的接口都不会写了,尤其是没有接触过Servlet
编程的朋友。因为加入没有了 Spring
等框架,那么我们就需要利用最原生的 Servlet
来自己实现接口路径的映射,对象也需要自己进行管理。
Spring 能帮我们做什么
Spring
是为解决企业级应用开发的复杂性而设计的一款框架,Spring
的设计理念就是:简化开发。
在 Spring
框架中,一切对象都是 bean
,所以其通过面向 bean
编程(BOP),结合其核心思想依赖注入(DI)和面向切面((AOP)编程,Spring
实现了其伟大的简化开发的设计理念。
控制反转(IOC)
IOC
全称为:Inversion of Control。控制反转的基本概念是:不用创建对象,但是需要描述创建对象的方式。
简单的说我们本来在代码中创建一个对象是通过 new
关键字,而使用了 Spring
之后,我们不在需要自己去 new
一个对象了,而是直接通过容器里面去取出来,再将其自动注入到我们需要的对象之中,即:依赖注入。
也就说创建对象的控制权不在我们程序员手上了,全部交由 Spring
进行管理,程序要只需要注入就可以了,所以才称之为控制反转。
依赖注入(DI)
依赖注入(Dependency Injection,DI)就是 Spring
为了实现控制反转的一种实现方式,所有有时候我们也将控制反转直接称之为依赖注入。
面向切面编程(AOP)
AOP
全称为:Aspect Oriented Programming。AOP
是一种编程思想,其核心构造是方面(切面),即将那些影响多个类的公共行为封装到可重用的模块中,而使原本的模块内只需关注自身的个性化行为。
AOP
编程的常用场景有:Authentication(权限认证)、Auto Caching(自动缓存处理)、Error Handling(统一错误处理)、Debugging(调试信息输出)、Logging(日志记录)、Transactions(事务处理)等。
利用 Spring 来完成 Hello World
最原生的 Spring
需要较多的配置文件,而 SpringBoot
省略了许多配置,相比较于原始的 Spring
又简化了不少,在这里我们就以 SpringBoot
为例来完成一个简单的接口开发。
1、新建一个 maven
项目,pom
文件中引入依赖(省略了少部分属性):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2、新建一个 HelloController
类:
package com.lonely.wolf.note.springboot.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping("/demo")
public String helloWorld(String name){
return "Hello:" + name;
}
}
3、最后新建一个 SpringBoot
启动类:
package com.lonely.wolf.note.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanBasePackages = "com.lonely.wolf.note.springboot")
class MySpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class, args);
}
}
4、现在就可以输入测试路径:http://localhost:8080/hello/demo?name=双子孤狼
进行测试,正常输出:Hello:双子孤狼
。
我们可以看到,利用 SpringBoot
来完成一个简单的应用开发非常简单,可以不需要任何配置完成一个简单的应用,这是因为 SpringBoot
内部已经做好了约定(约定优于配置思想),包括容器 Tomcat
都被默认集成,所以我们不需要任何配置文件就可以完成一个简单的 demo
应用。
假如没有了 Spring
通过上面的例子我们可以发现,利用 Spring
来完成一个 Hello World
非常简单,但是假如没有了 Spring
,我们又该如何完成这样的一个 Hello World
接口呢?
基于 Servlet 开发
在还没有框架之前,编程式基于原始的 Servlet
进行开发,下面我们就基于原生的 Servlet
来完成一个简单的接口调用。
1、pom
文件引入依赖,需要注意的是,package
属性要设置成 war
包,为了节省篇幅,这里没有列出 pom
完整的信息:
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>