SpringBoot官方例程使用以及踩坑
(一)先将项目穿件出来:
这个是从官网上摘录下来的的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-rest-service</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
至此SpringBoot的环境安装好了
下面就是编写代码了,直接贴上SpringBoot官方代码
package ControllerPackage;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
package ControllerPackage;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GreetingController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
package ControllerPackage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class hello {
public static void main(String[] args) {
SpringApplication.run(hello.class, args);
}
}
至此环境和代码都好了
(二)先给出错误示例(看图):
此时启动文件hello和controller不再同一个文件夹。
(三)将hello启动器和controller放置在同一个目录下
这样可以看到已经访问成功了。
(四)分析
从ssm可以知道扫描controller、service、dao、pojo、mapper映射文件都是靠xml文件的指定路径或是使用动态的注解方式来查找controller、service、dao、pojo、mapper映射文件的。但是就是注解方式也是有需要填写目标所在的大路径的。但是在SpringBoot中直接就不需要xml文件了(这样说是有的过头了,或者这样说在这个例程中不需要xml文件的配置),那么SpringBoot是如何来查找controller、service、dao、pojo、mapper映射文件这些文件的呢?
现在才开始看SpringBoot,或许可以猜测一下,就是扫描整个项目(或是直接扫描java目录下的所有的文件)凡是类中标有@RestController的注解的都认为是controller,其他的注解如@service也一样。至于pojo,到曾,则需要service自己去寻找,Controller不需要考虑这些事。
但是从这个例子看出好像不并不是这样的。启动器必须要和controller在同一个文件夹下才可以。或许是才学吧,还没有去看他的源码。或许有可能是启动器只查找本启动器所在的目录下的文件。这样的话我就不需要那么繁琐的去查找其他的文件夹下的文件是否是controller、service、dao、pojo、mapper映射文件。这样似乎是更加的简单些实现也方便。
以上分析属于个人观点,有什么不对的地方,恳请加以指正,不胜感谢。