赞
踩
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置
极大的简化了我们开发Spring应用的初始搭建以及开发过程
平时我们搭建一个Spring Web项目, 需要做以下工作:
而使用SpringBoot, 这些都不用我们自己手动配置了
Spring Boot 的基础结构共三个文件:
src/main/java
程序开发以及主程序入口src/main/resources
配置文件src/test/java
测试程序Spring Boot 建议的目录结构:
启动项目,只需启动 Application main 方法
①添加依赖:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
pom.xml 文件中默认有两个模块:
spring-boot-starter
:核心模块,包括自动配置支持、日志和 YAML,如果引入了 spring-boot-starter-web
web 模块可以去掉此配置,因为 spring-boot-starter-web
自动依赖了 spring-boot-starter
。spring-boot-starter-test
:测试模块,包括 JUnit、Hamcrest、Mockito。②编写 Controller 内容:
- @RestController
- public class HelloWorldController {
- @RequestMapping("/hello")
- public String index() {
- return "Hello World";
- }
- }
我们开发任何一个Spring Boot项目,都会用到如下的启动类
- @SpringBootApplication
- public class Application {
- public static void main(String[] args) {
- SpringApplication.run(Application.class, args);
- }
- }
其中, Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)究竟为何物:
点开@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) })
- public @interface SpringBootApplication {
- }
虽然定义使用了多个Annotation进行了原信息标注,但实际上重要的只有三个Annotation:
此标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
主要是通过此注解,能所有符合自动配置条件的bean的定义加载到spring容器中
@EnableAutoConfiguration借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器,仅此而已!
- @SuppressWarnings("deprecation")
- @Target(ElementType.TYPE)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Inherited
- @AutoConfigurationPackage
- @Import(EnableAutoConfigurationImportSelector.class)
- public @interface EnableAutoConfiguration {
- ...
- }
其中,最关键的要属@Import(EnableAutoConfigurationImportSelector.class),借助EnableAutoConfigurationImportSelector @EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。
智能的自动配置功能来源于:Spring框架原有的一个工具类:SpringFactoriesLoader的支持
SpringFactoriesLoader属于Spring框架私有的一种扩展方案,其主要功能就是从指定的配置文件META-INF/spring.factories加载配置。
因此,@EnableAutoConfiguration自动配置的功能就是:从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个并加载到IoC容器。
会扫描当前包及其子包下被@Component,@Controller,@Service,@Repository等注解标记的类并纳入到spring容器中进行管理。
①实例初始化ApplicationContext
②将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕ApplicationContext。
参考文章:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。