SpringBoot进阶

没想到把,SpringBoot虽然简化了开发流程,但要学的东西还有很多


1. Spring Boot简介

采用约定大于配置,简化Spring开发步骤与复杂的部署流程

快速创立可独立运行的Spring项目以及集成主流框架

嵌入式Servlet容器,无需打war包

starter自动依赖与版本控制

大量的自动配置,可修改默认值

需要xml,无代码生成,开箱即用

准生产环境的运行时应用监控

与其他框架天然集成

整合Spring技术栈的大框架






2. 入门解析

1.创建maven工程jar


2.导入父项目与依赖

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>

3.创建主程序

// 标注主程序类,说明是Springboot应用 @SpringBootApplication public class HelloWorld { public static void main(String[] args) { // 让Spring应用启动,需要传入主程序类,和其参数 SpringApplication.run(HelloWorld.class,args); } }

4.编写controller

@RestController public class HelloController { @RequestMapping(value = "/hello") public String hello(){ return "hello world"; } }

5.测试

来到主程序运行main方法

6.打包部署(记住名字不能有空格)

<!-- 将应用打包成可执行jar包的插件,package命令 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

7.分析pom.xml

spring-boot-starter-parent:还有一个父项目spring-boot-dependencies,里面规定了依赖版本号: <属性标签s> <properties> <!-- Dependency versions --> <activemq.version>5.14.5</activemq.version> <antlr2.version>2.7.7</antlr2.version> <appengine-sdk.version>1.9.59</appengine-sdk.version> <artemis.version>1.5.5</artemis.version> <aspectj.version>1.8.13</aspectj.version> 。。。。。 </properties>

8.导入的依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

spring-boot-starter-web:springBoot的场景启动器,里面很多依赖如:spring-web、spring-webmvc、jackson、hibernate-validator、spring-boot-starter-tomcat、spring-boot-starter

场景启动器:将功能场景抽取出来,做成starters启动器,只要项目中导入对应的启动器,那么相关场景的依赖就会自动导入


9.主程序类,入口类

@SpringBootApplication public class HelloWorld { public static void main(String[] args) { // 让Spring应用启动,需要传入主程序类,和其参数 SpringApplication.run(HelloWorld.class,args); } }

@SpringBootApplication:说明是Springboot的主配置类,那么就会运行main方法来启动应用


10.@SpringBootApplication的内部注解

@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} )} )

@SpringBootConfiguration:表示配置类,配置类也是容器的一个组件即@Component,(内部是用Spring的@Configuration)


11.@EnableAutoConfiguration:开启自动配置功能,其内部又有:

@AutoConfigurationPackage @Import({EnableAutoConfigurationImportSelector.class})

12.@AutoConfigurationPackage:将主配置类@SpringBootApplication标注的类及同级下面所有子包所有子包组件扫描

内部是@Import({Registrar.class}),spring的导入组件注解,Registrar.class内部有个方法

// 注册bean的定义信息,即导组件 // metadata注解标注的原信息 public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { AutoConfigurationPackages.register (registry, // 这里可以获取主配置类的上级包名 (new AutoConfigurationPackages.PackageImport(metadata)).getPackageName()); }

13.@Import({EnableAutoConfigurationImportSelector.class}):

导入组件的选择器EnableAutoConfigurationImportSelector.class,内容是:

// 内部继承父类,父类中有个方法 // 将所需导入的组件以全类名的方式返回,组件会被导入容器中 // 方法内部会导入非常多的自动配置类xxxAutoConfiguration,就是导入场景所需的全部组件,并配置好 public String[] selectImports(AnnotationMetadata annotationMetadata) { XXXX }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydsdg.html