Springboot 2——注解详解

根据编程不良人视频整理
将控制器与主入口类进行分离解耦
在main->com.estella ->新建包controller->新建类dayApplication

@RequestMapping("/hello")放在类前面,类中还有一个@GetMapping("/hello")
在浏览器中localhost:8080/hello/hello访问不成功

不成功原因:在入口类中的注解@EnableAutoConfiguration作用是开启自动配置,初始化spring环境springmvc环境,在使用mvc时我们知道如果日后我们想让对应的这些控制器生效的话,需要扫描到这些注解。原来将控制器写在主入口函数中的时候,@RestController和@EnableAutoConfiguration都在一个类的时候,@EnableAutoConfiguration这个注解能看到对应这个类的@RestController,这样会自动配置控制器相关的。而现在我们使用分包的方式解耦之后,虽然写了注解,但并没有告诉springboot在启动的时候去扫描我们相应的注解。

解决办法:如何扫描到controller分包中类的注解 :在入口类中 类上面添加注解@ComponentScan

@ComponentScan作用:用来扫描相关的注解
比如@RestController用来实例化一个控制器并把控制器中所有方法返回值转成json,响应到浏览器。如果看到@RequestMapping代表类的命名空间

@GetMapping代表具体方法的路径

@ComponentScan这个注解默认在扫描的时候扫描的是当前这个入口类所在的包及其子包

配置文件application.yml可以对整个springboot应用都进行配置。举例:springboot应用内嵌服务器默认tomcat,端口默认8080,日后想让tomcat端口不是默认的8080,可能日后 要在一次启动多个springboot应用,那么每个应用在端口上都应不同,不然无法启动,所以在配置文件中可以做一个端口的修改
修改内嵌Tomcat容器的端口号:
server:
port: 8989(冒号和数字之间必须有空格,否则配置不生效)yml文件容易出错 企业不常用
#tomcat默认不添加项目名
指定当前应用在部署到内嵌容器中的项目名
servlet:
context-path: /springboot_day
有了项目名之后就不能再直接以路径的方式访问了,在访问类和方法之前必须先访问应用名
http://localhost:8989/springboot_day/hello/hello

详解注解的作用:

@EnableAutoConfiguration 开启自动配置
修饰范围:只能用在类上,实际作用:根据我们在pom.xml文件中的依赖自动判断。例如引入了spring-boot-starter-web的依赖,springboot这个应用就会假定我们在开发一个springboot
web应用,会自动根据引入的这个依赖构建相关环境:springmvc环境
以及web容器环境。如果再引入spring-boot-starter-xxx都会自动配置

自动配置的原理:待补

@ComponentScan 用来开启注解扫描,修饰范围:只能用在类上 扫描注解范围:默认当前包以及当前包下的子包

@RestController 作用:用来实例化当前对象为一个控制器对象,并将类中所有的方法的返回值转为json响应给浏览器
这个注解相当于@Controller(实例化当前类为一个控制器)+@ResponseBody(用来将类中的方法转为json响应给浏览器)
修饰范围也适用于类上,相当与类中的所有方法都加上了注解,所以所有方法返回的都是json类型的字符串

@RequestMapping用来加入访问路径,修饰范围:类(加入命名空间),方法上(指定具体路径)

@GetMapping:作用:限定请求方式只能是GET,并指定路径 修饰范围:方法上 @POSTMapping @DeleteMapping
@PutMapping

main方法的作用://通过标准java入口方式委托给SpringApplication,并告知当前springboot主应用类是谁,从而启动springboot中Tomcat容器 。
args可以在启动时指定外部参数,具体操作:上方选择edit configurations想在运行的时候将端口临时更改而不该配置文件。所以可以在启动时添加一系列参数。选择Configuration,在VM options:中填入-Dserver.port=9999
-D后面的内容就会被main函数中args数组接收到然后传递给springboot, springboot一接收到server.port=9999时就会把默认的配置覆盖掉。

猜你喜欢

转载自blog.csdn.net/qq_42999949/article/details/108933391