六、SpringBoot入门详解

一、概念

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置

  1. Spring Boot 是 Spring 的一套快速配置脚手架
  2. Spring Boot专注于快速、方便集成的单个微服务个体
  3. Spring Boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了

二、SpringBoot优点

极大的简化了我们开发Spring应用的初始搭建以及开发过程

平时我们搭建一个Spring Web项目, 需要做以下工作:

  1. 配置 web.xml,加载 Spring 和 Spring mvc
  2. 配置数据库连接、配置 Spring 事务
  3. 配置加载配置文件的读取,开启注解
  4. 配置日志文件
  5. 配置完成之后部署 Tomcat 调试

而使用SpringBoot, 这些都不用我们自己手动配置了

三、快速入门

1.Idea构建项目

  1. 选择 File -> New —> Project… 弹出新建项目的框
  2. 选择 Spring Initializr,Next 也会出现上述类似的配置界面,Idea 帮我们做了集成
  3. 填写相关内容后,点击 Next 选择依赖的包再点击 Next,最后确定信息无误点击 Finish。

2.项目结构

Spring Boot 的基础结构共三个文件:

  • src/main/java 程序开发以及主程序入口
  • src/main/resources 配置文件
  • src/test/java 测试程序

Spring Boot 建议的目录结构:

  1. Application.java 建议放到根目录下面,主要用于做一些框架配置
  2. model 目录主要用于实体与数据访问层(Repository)
  3. service 层主要是业务类代码
  4. controller 负责页面访问控制

启动项目,只需启动 Application main 方法

3.引入Web模块

①添加依赖:

<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";
    }
}

四、springboot原理

我们开发任何一个Spring Boot项目,都会用到如下的启动类

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

其中, Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)究竟为何物:

1.@SpringBootApplication

点开@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:

  1. @Configuration(@SpringBootConfiguration点开查看发现里面还是应用了@Configuration)
  2. @EnableAutoConfiguration
  3. @ComponentScan

①@Configuration

标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。

②@EnableAutoConfiguration

主要是通过此注解,能所有符合自动配置条件的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容器。

③@ComponentScan

会扫描当前包及其子包下被@Component,@Controller,@Service,@Repository等注解标记的类并纳入到spring容器中进行管理。

2.SpringApplication.run

①实例初始化ApplicationContext

②将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕ApplicationContext。

 

参考文章:

http://tengj.top/2017/02/26/springboot1/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值