无Spring基础学习Springboot

学习Springboot自动装配原理(初探)

自动配置:
pom.xml

pom.xml文件标签阅读:

  • 启动器(依赖):Spring boot的应用启动场景,导入了环境所需的所有依赖
        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

spring-boot-starter-parent:

配置了资源过滤、插件

spring-boot-dependencies:

核心依赖在父工程中 进行了版本管理,可以不用指定版本

<groupId>: 项目或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app
<artifactId>:项目的通用名称
<version>:项目的版本
//g a v一般配套出现表明项目(或依赖配置文件)的坐标
<packaging>:打包的机制,如pom, jar
<name>:项目的名称, Maven 产生的文档用
<url>:哪个网站可以找到这个项目,提示如果 Maven 资源列表没有,可以直接上该网站寻找, Maven 产生的文档用
<description>:项目的描述, Maven 产生的文档用
<developers>:开发者信息
<contributors>:类似 developers
<mailingLists>:本项目相关 mail list, 用于订阅等信息
<issueManagement>:项目的问题管理系统(Bugzilla, Jira, Scarab
<organization>:organization information
<licenses>:License
<scm>:允许你配置你的代码库,为Maven web站点和其它插件使用
<distributionManagement>:用于配置分发管理,配置相应的产品发布信息,主要用于发布,在执行mvn deploy后表示要发布的位置
<properties>:①可以在标签内部配置连接数据库的信息。
             ②也可以通过属性引用外部配置文件信息。
			//pom.xml中一般为配置文件的版本信息?(存疑)
<dependencyManagement>:依赖管理
<dependencies>:启动器
<build>:全局配置或针对不同的profile配置
	<defaultGoal>:执行build任务时,如果没有指定目标,将使用的默认值。
	<directory>:build目标文件的存放目录,默认在${basedir}/target目录
	<finalName>:build目标文件的名称,默认情况为${artifactId}-${version}
	<filter>:定义*.properties文件,包含一个properties列表,该列表会应用到支持filter的resources中。也就是说,定义在filter的文件中的name=value键值对,会在build时代替${name}值应用到resources中。maven的默认filter文件夹为${basedir}/src/main/filters
	<resources>:用于包含或者排除某些资源文件
		<resource>包含或者排除某些资源文件
		<targetPath>指定build后的resource存放的文件夹,默认是basedir。通常被打包在jar中的resources的目标路径是META-INF
		<filtering>true/false,表示为这个resource,filter是否激活
		<directory>定义resource文件所在的文件夹,默认为${basedir}/src/main/resources
		<includes>指定哪些文件将被匹配,以*作为通配符
				<include>
		<excludes>指定哪些文件将被忽略
				<exclude>
	<testResources>定义和resource类似,只不过在test时使用
	<plugins>用于指定使用的插件
		<plugin>
			<groupId>
			<artifactId>
			<version> 指定插件的标准坐标
			<extensions>是否加载plugin的extensions,默认为false
			<inherited>true/false,这个plugin是否应用到该pom的孩子pom,默认为true
			<configuration>配置该plugin期望得到的properties
			<dependencies>作为plugin的依赖
			<executions>plugin可以有多个目标,每一个目标都可以有一个分开的配置,可以将一个plugin绑定到不同的阶段,假如绑定antrun:run目标到verify阶段

参考来源:

《pom.xml中各个标签的意思》
《properties标签的使用及细节》
《pom.xml中build标签》

主程序

@SpringBootApplication //程序的主入口
//@SpringBootApplication :标志Springboot应用 启动类下所有资源导入
public class Testone716Application {
    // 将springboot应用启动
    public static void main(String[] args) {
        SpringApplication.run(Testone716Application.class, args);
    }
}
  • 注解
    @SpringBootConfiguration : /*Springboot的配置*/
    	@Configuration : /*Spring配置类 */
    	@Component : /*说明这也是一个Spring类组件*/
    @EnableAutoConfiguration	/*自动配置*/
    	@Target({ElementType.TYPE})
    	@Retention(RetentionPolicy.RUNTIME)
    	@Documented
    	@Inherited
    	//以上四个为元注解
    	@AutoConfigurationPackage	/*自动配置包*/
    		@Import({Registrar.class}) /*自动配置`包注册`*/
    		//metadata 元数据
    	@Import({AutoConfigurationImportSelector.class}) /*自动导入选择*/
    		List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);//获取候选的配置
    
    
    • 获取候选的配置
    protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }
    
META-INF/spring.factories:自动配置的核心文件

[流程图](https://www.processon.com/mindmap/60f4447e1e085376da5baa50)

结论:Springboot所有的自动配置都在启动类中被扫描并加载 : spring.factories所有的自动配置类都在这里,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器,自动装配就会生效,配置成功。

1.springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值;
2.将这些自动配置的类导入容器,自动配置就会生效,帮我们自动配置
3.整个javaEE解决方案和自动配置的文件都在spring-boot-autoconfigure中
4.将所有需要导入的组件,以类名的方式返回,组件就会被添加到容器。
5.容器中也存在很多xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件,并自动配置,@Configuration,JavaConfig
6.有了以上,免去手写配置

以上所有均学自kuangstudy.com

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值