首页 > 应用开发 > > spring boot入门,看这篇文章就够了
Spring
应用开发的一个框架、整个
Spring
技术栈的一个大整合;
J2EE
开发的一站式解决方案;
优点:
Spring
项目以及与主流框架集成;
Servlet
容器,应用无需打成
WAR
包;
starters
自动依赖与版本控制;
XML
,无代码生成,开箱即用;
HTTP
的方式进行互通;
ALL IN ONE
给
maven
的
settings.xml
配置文件的
profiles
标签添加下面的代码:
jdk-1.8 true 1.8 1.8 1.8 1.8
表示
maven
使用
jdk1.8
。
实现功能:
浏览器发送
hello请求,服务器接受请求并处理,响应Hello Springboot!字符串;即浏览器输入localhost:8080/hello可以看到浏览器显示Hello SpringBoot!字符串;
① 创建一个
maven
工程(
jar
);
② 导入
spring boot
相关的依赖;
org.springframework.boot spring‐boot‐starter‐parent 1.5.9.RELEASE org.springframework.boot spring‐boot‐starter‐web
③ 编写一个主程序,启动
Spring Boot
应用
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
④ 编写相关的
Controller
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello SpringBoot!";
}
}
⑤ 运行主程序测试
⑥简化部署
将这个应用打成
jar
包,直接使用
java-jar
的命令进行执行;
<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->org.springframework.boot spring-boot-maven-plugin
结果:
父项目
org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE
他的父项目:
org.springframework.boot spring-boot-dependencies 1.5.9.RELEASE ../../spring-boot-dependencies
他来真正管理
Spring Boot
应用里面的所有依赖版本;
也就是
Spring Boot
的版本仲裁中心;
以后我们导入依赖默认是不需要写版本;
(没有在
dependencies
里面管理的依赖自然需要声明版本号)
启动器:
org.springframework.boot spring-boot-starter-web
spring-boot-starter -web:
spring-boot-starter
:
spring-boot
场景启动器;帮我们导入了
web
模块正常运行所依赖的组件;
Spring Boot
将所有的功能场景都抽取出来,做成一个个的
starters
(启动器),只需要在项目里面引入这些
starter
相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器。
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应用启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
①
@SpringBootApplication
:
Spring Boot
应用标注在某个类上说明这个类是
SpringBoot
的主配置类,
SpringBoot
就应该运行这个类的
main
方法来启动
SpringBoot
应用;这是一个
组合注解
。
@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 {
...
}
下面看里面的每个注解含义:
@SpringBootConfiguration
:
Spring Boot
的配置类,标注在某个类上,表示这是一个
Spring Boot
的配置类,里面包含这个
@Configuration
(也就是
Spring
里面的配置类);
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
配置类 —–> 配置文件;配置类也是容器中的一个组件:
@Component
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component //组件注解
public @interface Configuration {
@AliasFor(
annotation = Component.class
)
String value() default "";
}
②
@EnableAutoConfiguration
:开启自动配置功能;
以前我们需要配置的东西,
Spring Boot
帮我们自动配置;
@EnableAutoConfiguration
告诉
SpringBoot
开启自动配置功能,这样自动配置才能生效;
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
}
@AutoConfigurationPackage
:自动配置包
@Import(AutoConfigurationPackages.Registrar.class)
:
Spring
的底层注解
@Import
,给容器中导入一个组件;导入的组件由
AutoConfigurationPackages.Registrar.class
指定。 也就是: 将主配置类(
@SpringBootApplication
标注的类)的
所在包及下面所有子包里面的所有组件扫描到Spring容器;,所以如果上面的
controller
如果不是在主配置类所在的包(或者子包)下,就不能扫描到。
@Import(EnableAutoConfigurationImportSelector.class)
: 给容器中导入组件(不在同一个包下面的)
EnableAutoConfigurationImportSelector
:导入哪些组件的选择器;将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(
xxxAutoConfiguration
);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作; 里面的
getCandidateConfigurations
调用了下面的一个方法:
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)
Spring Boot在启动的时候从类路径下的
META-INF/spring.factories
中获取
EnableAutoConfiguration
指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作;以前我们需要自己配置的东西,自动配置类都帮我们;
J2EE的整体整合解决方案和自动配置都在
spring-boot-autoconfigure-xxx.RELEASE.jar
;
IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目。选择我们需要的模块,向导会联网创建Spring Boot项目,默认生成的Spring Boot项目; 主程序生成好了,我们只需要我们自己的逻辑。
resources
: 文件夹中目录结构
static
:保存所有的静态资源;
js css images
;
templates
:保存所有的模板页面;(Spring Boot默认
jar
包使用嵌入式的
Tomcat
,默认不支持
JSP
页 面);可以使用模板引擎(
freemarker
、
thymeleaf
);
application.properties
:Spring Boot应用的配置文件,可以修改一些默认设置;
结构目录:
简单
Controller
,注意
@RestController
注解。
package com.zxin.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
//@ResponseBody // 这个类的所有方法返回的数据直接写给浏览器(如果是对象 -> 转成json)
//@Controller
@RestController // 这个注解的作用和上面两个一起的作用相同 (就是 ResponseBody和Controller的合体)
public class HelloController {
@ResponseBody //如果每个类都需要写,麻烦
@RequestMapping("/hello")
public String hello(){
return "hello quick SpringBoot!";
}
}
原文: Java架构笔记
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69917606/viewspace-3154658/ ,如需转载,请注明出处,否则将追究法律责任。