Spring的优点分析:
Spring是Java企业版(Java Enterprise Edition
,JEE,也称J2EE
)的轻量级代替品。无需开发重量级的Enterprise JavaBean
(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Plain Old Java Object
,POJO)实现了EJB的功能。
Spring的缺点分析
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring用XML配置,而且是很多XML配置。Spring 2.5
引入了基于注解的组件扫描,这消除了大量针对应用程序自身组件的显式XML配置。Spring 3.0
引入 了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。 所有这些配置都代表了开发时的损耗。因为在思考Spring特性配置和解决业务问题之间需要进行思维切换,所以编 写配置挤占了编写应用程序逻辑的时间。和所有框架一样,Spring实用,但与此同时它要求的回报也不少。 除此之外,项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
Spring Boot是Spring公司的一个顶级项目,和Spring Framework
是一个级别的。
Spring Boot实际上是利用Spring Framework 4
自动配置特性完成。编写项目时不需要编写xml文件。发展到现在,Spring Boot已经具有很很大的生态圈,各种主流技术已经都提供了Spring Boot的启动器。
springboot优点:
Tomcat
、Jetty
、Undertow
等Web 容器,在使用SpringBoot做Web开发时不需要部署WAR文件springboot版本介绍
SNAPSHOT
:快照版,即开发版。CURRENT
:最新版,但是不一定是稳定版。GA
:General Availability
,正式发布的版本。现在的最新的正式发布的版本是
2.7.5
,我以这个版本进行学习。
Spring boot的核心:
Spring框架在项目中作用是Spring整合各种其他技术,让其他技术使用更加方便。Spring Boot
的启动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关jar包,还包含了这个技术的自动配置,以前绝大多数XML配置都不需要配置了。当然了,启动器中自动配置无法实现所有内容的自动配置,在使用Spring Boot时还需要进行少量的配置(这个配置不是在xml中了,而是在properties
或yml
中即可)。如果是Spring自己封装的启动器的artifact id名字满足:spring-boot-starter-xxxx
,如果是第三方公司提供的启动满足:xxxx-spring-boot-starter
。以后每次使用Spring Boot整合其他技术时首先需要考虑导入启动器。
创建一个空项目(Empty Project)SpringBootWorkSpace
,专门放Spring boot的学习案例。(这个是我的个人习惯,因为有时候文件太多了放的乱七八糟)
在这个项目中创建普通的Maven模块(不选择任何模版archetype
)
创建之后的目录:
继承父项目:
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.7.5version>
parent>
导入依赖:
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.7.5version>
dependency>
dependencies>
看一下循环的依赖图:
书写controller层的代码,和Spring MVC一样:
package com.bones.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/testController")
public String testController(){
return "Hello Spring Boot";
}
}
写启动类,建议在隔层包的同级创建,比如你的controller类写在com.bones.controller
包下,那么启动类写在com.bones.controller
这一层包同级。
Spring Boot的启动类的作用是启动Spring Boot项目,是基于Main方法来运行的。
注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository…),扫描位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。
启动类表示项目的启动入口
启动器表示jar包的坐标
必须在包中新建这个类,不能直接放入到java文件夹。
在com.bones
下新建自定义名称的类(规范:XXXXApplication),可以是项目上下文路径Application
package com.bones;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootPro01Application {
public static void main(String[] args) {
//第一个参数是启动类的字节码文件,因为要扫描这个启动类所在的包,第二个参数就是main方法的args参数传入即可
SpringApplication.run(SpringbootPro01Application.class,args);
}
}
点击main方法启动即可,可以看一下打印的日志:
访问localhost:8080/testController
显然执行了controller 中的处理单元。
可能在公司中可能会出现必须继承某个项目,如果Spring Boot用了继承就不能继承别的项目了。所以Spring Boot还提供了依赖的方式。
重新创建一个模块:(还是一个普通的maven模块)
导入依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>2.7.5version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.7.5version>
dependency>
dependencies>
和前一个方法一样写个controller测试即可。
这个方法对于想要省事的来说简直太友好了。这个方式是IDEA自带的项目初始化插件的。
再创建一个项目,但是此时选择Spring initializer
启动成功之后,直接写controller进行测试。启动类不需要自己写,已经有了。(这就是这个方法最推荐的原因,简直爽歪歪)