首页 > 其他分享 >测试

测试

时间:2023-01-14 21:31:44浏览次数:45  
标签:String 源码 EnableAutoConfiguration 测试 AliasFor class SpringBoot


SpringBoot核心原理:自动配置

2018-02-25  java4all  ​​java4all​

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

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

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

分析@SpringBootApplication源码;

分析@EnableAutoConfiguration源码;

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

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


  1. 新建一个普通的SpringBoot项目,然后随便加几个注解,后面会提到这几个注解,代码如下:
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,我们进入这个注解,看看源码:


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​




标签:String,源码,EnableAutoConfiguration,测试,AliasFor,class,SpringBoot
From: https://blog.51cto.com/u_15936016/6007823

相关文章

  • Gradle配置对数据库集成测试的方法
    Gradle管理Java项目,标准项目布局仅定义了一个测试目录( src/test ),如果将集成测试添加到与单元测试相同的目录中。这是一个糟糕的主意,因为集成测试通常比单元测试慢很......
  • NIST随机性测试套件下载,安装,实验
    参考博客NIST随机性测试美国国家标准与技术研究所提供的测试,一共包括16种测试手段,具体内容可参考此博客NIST下载与安装环境:Windows11下载:NIST官网链接点击downlo......
  • API接口自动化测试框架搭建之需求整理、详细设计和框架设计
    (API接口自动化测试框架搭建之需求整理、详细设计和框架设计)1需求整理1.1实现目的API接口自动化测试,主要针对http接口协议;便于回归测试;线上或线下巡检测试,结合持续......
  • Centos7下安装Dogtail GUI自动化测试工具并打开sniff工具过程中遇到的问题解决方法
    (目录)因为测试需要,需在Centos下进行liunxGUI软件自动化测试,所以用到了python的Dogtail库,继而使用Dogtail的sniff控件获取工具,但是遇到了很多问题记录如下。1环境Cent......
  • 蓝牙模块测试那些事之从机测试
    ​摘要:本文主要目的是在拿到一个蓝牙模块后,将其作为从机来对一些基本的软件功能进行测试,用以快速验证是否满足基本的使用需求和功能指标。针对测试的方法和测试的项目......
  • <Verilog学习>Verilog设计“111”检测器与“01110”检测器并测试所有情况
    使用Quartus+modelsim完成本次设计目录1."111"检测器分析代码实现Testbench结果2."01110"检测器分析代码实现Testbench结果1."111"检测器分析分析题目,得到其有限状......
  • 原生GIT版本服务器配置和测试
    前言:原生GIT版本服务器指使用Linux内核自带的GIT软件来构建版本服务器,而不采用Git-lab、SCM-Manager等非Linux原生系统。本文提供原生GIT安装、配置、测试和安全性设置。以......
  • 性能测试|JMeter参数化(一)
    Jmeter参数化之CSVDataSetConfig1、什么是参数化?固定的数据,使用动态参数的形式代替,而动态参数是可以根据自己的需要进行配置的。2、什么时候用到参数化?登录操作中的用......
  • 性能测试|JMeter连接数据库
    jmeter连接mysql数据库总体步骤如下:下载mysql的jar包放入到jmeter的lib下,然后重启jmeter配置JDBCConnectionConfiguration配置JDBCRequest在请求中引用查询到的结果变量,......
  • App自动化测试|Appium介绍
    App自动化测试|Appium介绍Appium简介Appium是一个开源工具,用于自动化iOS手机、Android手机和Windows桌面平台上的原生、移动Web和混合应用。原生应用:指那些用iOS、Android或......