前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

测试

作者头像
IT云清
发布2019-01-22 10:39:02
3080
发布2019-01-22 10:39:02
举报
文章被收录于专栏:IT云清IT云清

SpringBoot核心原理:自动配置

2018-02-25 java4all java4all

摘要:本文通过断点追溯源码的方式,来逐步展示SpringBoot的核心功能实现原理:自动化配置;

由于是分析源码,贴出了一些源码,所以文章较长,但关键都是在文字上,可以跳着看;

本文较长,分为两篇,但主要内容如下:

分析@SpringBootApplication源码;

分析@EnableAutoConfiguration源码;

分析AutoConfigurationImportSelector类中的部分方法(这个是关键);

(由于篇幅,我会删除很多无用代码,但不代表此类没有这些代码,如大量的import xxx.xxx.xxx等代码)

  1. 新建一个普通的SpringBoot项目,然后随便加几个注解,后面会提到这几个注解,代码如下:
代码语言:javascript
复制
package com.jd;

@EnableAsync
@RestController
@EnableScheduling
@SpringBootApplication
public class JdmallApplication {

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

@RequestMapping(value = "getHello",method = RequestMethod.GET)
public String getHello(){
return "good";
   }
}

2.我们知道SpringBoot的入口是:@SpringBootApplication,我们进入这个注解,看看源码:

代码语言:javascript
复制
package org.springframework.boot.autoconfigure;

@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 {
    @AliasFor(
        annotation = EnableAutoConfiguration.class,
        attribute = "exclude"
    )
    Class<?>[] exclude() default {};

    @AliasFor(
        annotation = EnableAutoConfiguration.class,
        attribute = "excludeName"
    )
    String[] excludeName() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};
}

公众号来源:java4all

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年02月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot核心原理:自动配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档