标签:容器 SpringBoot Spring 配置 boot 视图 入门
SpringBoot入门
创建第一个SpringBoot应用:
一、SpringBoot简介
Springboot是Java企业开发里最流行的框架,它为各种第三方框架的快速整合提供了自动配置,一旦用上了SpringBoot,开发者只需专注于应用中业务逻辑功能的实现。
二、Java EE应用与Spring
Spring是Java领域中应用最广的框架,从本质上说:
- Spring只是一个组件容器,负责创建并管理容器中的组件(称为Bean),并管理组件之间的依赖关系。
- 由于Spring将容器功能做到了极致,Java EE应用所涉及的以下各种组件,都处于Spring容器的管理之下:
- 前端控制器组件
- 安全组件
- 业务逻辑组件
- 消息组件
- DAO组件(Spring也称其为Repository)
- 连接数据库的基础组件(如DataSource、ConnectionFactory、SessionFactory等)
对于其他各种功能型的框架,它们都需要一个容器来承载其运行,而Spring正是这个不可替代的容器。
关于Java领域中的功能型框架,各方面的功能都存在不少框架可供选择:
- 前端:Spring WebFlux、Spring MVC、Struts2
- 安全领域:Spring Security、Shiro等
- 消息组件:ActiveMQ、RabbitMQ、Kafka等
- 缓存:JCache、EhCache、Hazelcast、Redis等
- 持久层框架:JPA、MyBatis、jOOQ、R2DBC
- 分布式:ZooKeeper、Dubbo等
- NoSQL存储:Redis、MongoDB、Neo4j、Cassandra、Geodo等
- 搜索引擎:Lucene、Solr、Elasticsearch等
- 数据库存储:MySQL、PostgreSQL、Oracle等
- Web服务器:Tomcat、Jetty、Undertow等
作为容器的Spring,是无可替代的,上面列出的这些框架,它们都需要与Spring进行整合,这就是Spring的魅力
传统Spring使用XML配置或注解来管理这些组件,因此搭建一个Java EE应用往往需要进行大量的配置和注解。这些配置工作都属于项目的基础搭建,与业务功能无关,这些工作对于初、中级开发者往往难度不小,很容易出错,在这种背景下,Spring推出了SpringBoot。
三、SpringBoot优势
Spring框架唯一的缺点是配置过多,搭建项目时需要进行大量的配置,而SpringBoot的出现,就是为了解决这个问题。
SpringBoot为绝大部分第三方框架的快速整合提供了自动配置,SpringBoot使用约定优先于配置的理念,针对企业应用开发各种场景提供了对应的Starter,开发者只要将该Starter添加到项目的类加载路径中,该Starter即可完成第三方框架的整合。
总体来说:SpringBoot具有以下特性:
- 内嵌Tomcat、Jetty或Undertow服务器,因此SpringBoot应用无需被部署到其他服务器中。
- SpringBoot应用可被做成独立的Java应用程序。
- 尽可能地自动配置Spring及第三方框架。
- 完全没有代码生成,也不需要XML配置
- 提供产品级监控功能,如运行状况检查和外部化配置等
SpringBoot主要功能就是:
- 为Spring及第三方框架的快速启动提供自动配置
- 当Spring及第三方框架整合起来之后,SpringBoot的责任也就完成了
- 在实际开发中发挥功能的依然是前面列出的那些框架和技术
四、SpringBoot应用打包类型
由于SpringBoot内嵌了Tomcat、Jetty或Undertow服务器,因此SpringBoot应用通常不需要被部署到Web服务器中,选择打包成JAR即可。
只有在极个别的情况下,不想使用SpringBoot内嵌服务器,才会考虑将它打包成WAR包(Web应用包),部署到独立的Web服务器中
五、pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 配置项目的基本信息 -->
<groupId>com.bigdata.boot</groupId>
<artifactId>boot-helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 定义所使用的java版本 -->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- Spring Web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot单元测试的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- 定义SpringBoot Maven依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<excludes>
<exclude> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
六、编写控制器
SpringBoot的功能只是为整合提供自动配置,因此SpringBoot应用的控制器依然是Spring MVC、Spring WebFlux或Struts 2的控制器,具体定义哪种控制器取决于项目技术栈的前端框架,本例采用Spring MVC作为前端框架,因此这里定义一个Spring MVC的前端控制器类。
@Controller
public class BookController
{
@GetMapping("/")
public String index(Model model)
{
model.addAttribute("tip","欢迎访问第一个SpringBoot应用");
return "hello";
}
@GetMapping("/rest")
@ResponseBody
public ResponseEntity restIndex()
{
return new ResponseEntity<>("欢迎访问第一个springboot应用",null,HttpStatus.OK);
}
}
上面的BookController就是一个再普通不过的Spring MVC的控制器,@Controller、@GetMapping、@ResponseBody注解都是最基本的SpringMVC注解。
- @Controller:用于修饰类,指定该类的实例作为控制器组件
- @GetMapping:用于修饰方法,指定该方法所能处理的Get请求的地址
- @ResponseBody:用于修饰方法,指定该方法生成Restful响应
上面的控制器类中定义了两个处理方法,其中第一个index()方法返回的"hello"字符串只是一个逻辑视图名,因此它还需要物理视图资源。
SpringBoot推荐使用Thymeleaf作为视图模版技术,同时可以使用BootStrap UI库美化界面。
使用前后端分离架构的应用,SpringBoot应用根本不需要生成视图响应,自然也就不需要任何视图模版技术了,在前后端分离架构的应用中,SpringBoot只需要对外提供Restful响应,前端应用则通过Restful接口与后端通信,前端应用负责生成界面,与用户交互。
七、定义视图页面
为BookController的第一个处理方法返回的"hello"逻辑视图名定义Thymeleaf视图页面hello.html
SpringBoot默认要求将Thymeleaf视图页面放在resource\templates\目录下,因此需要将hello.html的视图放在该目录下。由于该页面是为hello逻辑视图名提供视图,因此该页面的文件名为"hello.html".
Thymeleaf视图页面的语法核心设计就是:以“th:”开头的属性来处理表达式的值,比如th:text属性的作用就是用目标HTML元素来显示表达式的值。
八、运行应用
package com.bigdata.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MainApplication{
public static void main(String[] args) {
//创建Spring容器,运行SpringBoot应用
SpringApplication.run(MainApplication.class,args);
}
}
调用SpringApplication类的run()方法来创建Spring容器,运行SpringBoot应用。
SpringBoot是基于Spring框架的,而Spring框架最重要的核心就是Spring容器,对于Spring来说,万物都是Bean,而容器就是所有Bean所在的天地,负责管理所有Bean的生死。一个Spring容器就是天地万物,因此所有Spring框架的应用的第一步都是创建Spring容器。
SpringApplication类中run()方法的返回值就是ConfigurableApplicationContext,这就是Spring容器,可见run()方法将会创建并返回Spring容器
有了Spring容器之后,容器中的Bean来自任意用@Configuration注解修饰的Java类(Java配置类,相当于传统的XML配置文件),Spring容器会加载该配置类并创建该配置类中的所有Bean,并且会扫描该配置类相同包或其子包下的所有Bean。
run()方法的第一个参数是MainApplication类,该类应该是带@Configuration注解修饰的配置类。查看@SpringBootConfiguration源码,发现@SpringBootConfiguration就是@Configuration源码。由此可见,@SpringBootApplication注解相当于3个注解的组合版。
- @Configuration:该注解修饰的类将作为Java配置类
- @EnableAutoConfiguration:启用自动配置
- @ComponentScan:指定零配置时扫描哪些包及其子包下的Bean
可见SpringBootConfiguration注解只是一个快捷方式,同时启用了3个注解,从而完成了3个功能:
- 将被修饰的类变成Java配置类
- 启用自动配置
- 定义了Spring容器扫描Bean类的包及其子包
所谓的自动配置,只是SpringBoot提供了预配置。由于SpringBoot提供的预配置,因此开发者无须过多配置即可把项目搭建起来。
标签:容器,SpringBoot,Spring,配置,boot,视图,入门 来源: https://blog.csdn.net/zhengzaifeidelushang/article/details/120537209
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。