【SpringBoot1】⼊门篇,java开发视频直播服务1.8
<mavenpiler.source>1.8</mavenpiler.source>
<mavenpiler.target>1.8</mavenpiler.target>
<mavenpilerpilerVersion>1.8</mavenpilerpilerVersion>
(2)导⼊spring boot相关的依赖
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
org.springframework.boot
spring-boot-starter-web
(3)编写⼀个主程序;启动Spring Boot应⽤
/
**
@SpringBootApplication 来标注⼀个主程序类,说明这是⼀个Spring Boot应⽤
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring应⽤启动起来
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
(4)编写相关的Controller、Service
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return “Hello World!”;
}
}
@RestController 的意思就是 Controller ⾥⾯的⽅法都以json格式输出,不⽤再写什么jackjson配置的了。(5)运⾏主程序测试
(6)如何做单元测试
打开的 src/test/ 下的测试⼊⼝,编写简单的 http 请求来测试;使⽤ mockmvc 进⾏,利⽤ MockMvcResultHandlers.print() 打印出执⾏结果。
@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloTests {
private MockMvc mvc;
@Before
public void setUp() throws Exception {
mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
}
@Test
public void getHello() throws Exception {
mvc.("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo(“Hello World”)));
}
}
(7)简化部署
org.springframework.boot
spring-boot-maven-plugin
将这个应⽤打成jar包,直接使⽤java -jar的命令进⾏执⾏
4、Hello World探究
(1)POM⽂件
spring-boot-starter 核⼼模块,包括⾃动配置⽀持、⽇志和YAML,如果引⼊了 spring-boot-starter-web web模块可以去掉此配置,因为 spring-boot-starter-web ⾃动依赖了spring-boot-starter。
spring-boot-starter-test 测试模块,包括JUnit、Hamcrest、Mockito。
⽗项⽬
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应⽤⾥⾯的所有依赖版本;
启动器
org.springframework.boot
spring-boot-starter-web
spring-boot-starter:spring-boot场景启动器;帮我们导⼊了web模块正常运⾏所依赖的组件;
Spring Boot将所有的功能场景都抽取出来,做成⼀个个的starters(启动器),只需要在项⽬⾥⾯引⼊这些starter相关场景的所有依赖都会导⼊进来。要⽤什么功能就导⼊什么场景的启动器。
(2)主程序类,主⼊⼝类
/**
@SpringBootApplication 来标注⼀个主程序类,说明这是⼀个Spring Boot应⽤
*/
@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:配置类上来标注这个注解;
配置类 ----- 配置⽂件;配置类也是容器中的⼀个组件;
@EnableAutoConfiguration:开启⾃动配置功能;
以前我们需要配置的东西,Spring Boot帮我们⾃动配置;@**EnableAutoConfiguration**告诉SpringBoot开启⾃动配置功能;这样⾃动配置才能⽣效;
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}
@AutoConfigurationPackage:⾃动配置包
@Import(AutoConfigurationPackages.Registrar.class):
Spring的底层注解@Import,给容器中导⼊⼀个组件;导⼊的组件由AutoConfigurationPackages.Registrar.class;
==将主配置类(@SpringBootApplication标注的类)的所在包及下⾯所有⼦包⾥⾯的所有组件扫描到Spring容器;==
@Import(EnableAutoConfigurationImportSelector.class);
给容器中导⼊组件?
EnableAutoConfigurationImportSelector:导⼊哪些组件的选择器;
将所有需要导⼊的组件以全类名的⽅式返回;这些组件就会被添加到容器中;
会给容器中导⼊⾮常多的⾃动配置类(xxxAutoConfiguration);就是给容器中导⼊这个场景需要的所有组件,并配置好这些组件; ![⾃动配置类](images/搜狗截图20180129224104.png)
有了⾃动配置类,免去了我们⼿动编写配置注⼊功能组件等的⼯作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);
Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为⾃动配置类导⼊到容器中,⾃动配置类就⽣效,帮我们进⾏⾃动配置⼯作;以前我们需要⾃⼰配置的东西,⾃动配置类都帮我们;
J2EE的整体整合解决⽅案和⾃动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar;
四、配置⽂件
======
1、配置⽂件简介
SpringBoot使⽤⼀个全局的配置⽂件,配置⽂件名是固定的;
application.properties
配置⽂件的作⽤:修改SpringBoot⾃动配置的默认值;SpringBoot在底层都给我们⾃动配置好;
YAML(YAML Ain’t Markup Language)
YAML A Markup Language:是⼀个标记语⾔
YAML isn’t Markup Language:不是⼀个标记语⾔;
标记语⾔:
以前的配置⽂件;⼤多都使⽤的是 **l**⽂件;
YAML:**以数据为中⼼**,⽐json、xml等更适合做配置⽂件;
YAML:配置例⼦
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论