新建 Spring Boot 项目常用的两种方式
你可以通过 https://start.spring.io/ 这个网站来生成一个 Spring Boot 的项目。
你可以选择自己喜欢的依赖进行加载到项目当中。

Spring Boot 项目结构分析
成功打开项目之后,项目长下面这个样子

以 Application为后缀名的 Java 类一般就是 Spring Boot 的启动类,比如本项目的启动项目就是HelloWorldApplication 。我们直接像运行普通 Java 程序一样运行它,由于 Spring Boot 本身就嵌入servlet容器的缘故,我们的 web 项目就运行成功了, 非常方便。

需要注意的一点是 Spring Boot 的启动类是需要最外层的,不然可能导致一些类无法被正确扫描到,导致一些奇怪的问题。 一般情况下 Spring Boot 项目结构类似下面这样
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- controller
| +- CustomerController.java
|
| +- config
| +- swagerConfig.java
|
Application.java是项目的启动类
domain目录主要用于实体(Entity)与数据访问层(Repository)
service 层主要是业务类代码
controller 负责页面访问控制
config 目录主要放一些配置类
@SpringBootApplication 注解分析
HelloWorldApplication

@SpringBootApplication
public class HelloWorldApplication {

public static void main(String[] args) {
    SpringApplication.run(HelloWorldApplication.class, args);
}

}
说到 Spring Boot 启动类就不得不介绍一下 @SpringBootApplication 注解了,这个注解的相关代码如下:

package org.springframework.boot.autoconfigure;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
......
}
package org.springframework.boot;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {

}
可以看出大概可以把 @SpringBootApplication看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。根据 SpringBoot官网,这三个注解的作用分别是:

@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
@ComponentScan: 扫描被@Component (@Service,@Controller)注解的bean,注解默认会扫描该类所在的包下所有的类。
@Configuration:允许在上下文中注册额外的bean或导入其他配置类。
所以说 @SpringBootApplication就是几个重要的注解的组合,为什么要有它?当然是为了省事,避免了我们每次开发 Spring Boot 项目都要写一些必备的注解。这一点在我们平时开发中也经常用到,比如我们通常会提一个测试基类,这个基类包含了我们写测试所需要的一些基本的注解和一些依赖。

新建一个 Controller
上面说了这么多,我们现在正式开始写 Spring Boot 版的 “Hello World” 吧。

新建一个 controller 文件夹,并在这个文件夹下新建一个名字叫做 HelloWorldController 的类。

@RestController是Spring 4 之后新加的注解,如果在Spring4之前开发 RESTful Web服务的话,你需要使用@Controller 并结合@ResponseBody注解,也就是说@Controller +@ResponseBody= @RestController。对于这两个注解,我在基础篇单独抽了一篇文章来介绍。

com.example.helloworld.controller

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("test")
public class HelloWorldController {
@GetMapping("hello")
public String sayHello() {
return "Hello World";
}
}
默认情况下,Spring Boot 项目会使用 8080 作为项目的端口号。如果我们修改端口号的话,非常简单,直接修改

application.properties配置文件即可。

src/main/resources/application.properties

server.port=8333
大功告成,运行项目
运行 HelloWorldApplication ,运行成功控制台会打印出一些消息,不要忽略这些消息,它里面会有一些比较有用的信息。

2019-10-03 09:24:47.757 INFO 26326 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8333 (http) with context path ''
上面是我截取的一段控制台打印出的内容,通过这段内容我们就知道了 Spring Boot 默认使用的 Tomact 内置 web 服务器,项目被运行在我们指定的 8333 端口上,并且项目根上下文路径是 "/"。

浏览器 http://localhost:8333/test/hello 如果你可以在页面正确得到 "Hello World" 的话,说明你已经成功完成了这部分内容。

总结
通过本文我们学到了如何新建 Spring Boot 项目、SpringBoot 项目常见的项目结构分析、@SpringBootApplication 注解分析,最后实现了 Spring Boot 版的 "Hello World"。

最新文章

  1. React.js实现原生js拖拽效果及思考
  2. video.js播放mp4文件
  3. MYSQL序言
  4. YCM的安装与配置
  5. vs2010调用matlab2011下的.m文件
  6. Java图片上传压缩处理
  7. Linux下查看Web服务器当前的并发连接数和TCP连接状态
  8. UNIX网络编程---传输层:TCP、UDP、SCTP(二)
  9. Android基于发展Service音乐播放器
  10. TCP拥塞处理—Congestion Handing
  11. Linux - 进程间通信 - 信号量
  12. hihoCoder 1015 KMP算法
  13. 阿里云对象存储OSS访问控制
  14. Oracle 里 case 和decode的简单用法
  15. PHP 面向对象之单例模式-有些类也需要计划生育
  16. day 08 文件操作
  17. Linux(以centos7为例)下自动挂载NTFS硬盘
  18. 设置 DNS,防止 DNS 污染,清除 DNS 缓存ipconfig /flushdns
  19. kali-rolling安装openvas 9并创建扫描任务教程
  20. 常见排序算法 - Java实现

热门文章

  1. sso系统登录以及jsonp原理
  2. TCP网络调试助手上提示错误:“1035 未知错误”的有效解决方法,本人实测确实可行
  3. 吴裕雄--天生自然Numpy库学习笔记:Numpy 数组操作
  4. JavaScript - map和parseInt的坑
  5. 面试问题之——给你图片的url,你能知道它所占的字节空间吗?
  6. 【快学SpringBoot】SpringBoot+Docker构建、运行、部署应用
  7. C语言的变量存储方式和生存期
  8. Java中对于ClassLoader类加载器 嵌套了深度技术的价值
  9. kafka 日志策略
  10. 第2节 Scala中面向对象编程:7、继承的概念以及override和super关键字;8、isInstanceOf 和 asInstanceOf关键字