springBoot 依赖管理 自动配置,容器功能 ,以及配置常用注解详解

springboot 特点

依赖管理    
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
</parent>

他的父项目
 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.4.RELEASE</version>
  </parent>

几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制

导入starter场景启动器
1.spring-boot-starter-* : 就某种场景
2.只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3.SpringBoot所有支持的场景
4.
-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器
5.无需关注版本号,自动版本仲裁

1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
2、在当前项目里面重写配置,修改版本号
    <properties>
        <mysql.version>5.1.43</mysql.version>
    </properties>

自动配置

自动配好Tomcat
引入Tomcat依赖。
配置Tomcat

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <version>2.3.4.RELEASE</version>
      <scope>compile</scope>
    </dependency>

自动配好SpringMVC
引入SpringMVC全套组件
自动配好SpringMVC常用组件(功能)

自动配好Web常见功能,如:字符编码问题
SpringBoot帮我们配置好了所有web开发的常见场景

默认包结构
主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
无需以前的包扫描配置,可以修改@SpringBootApplication(scanBasePackages=“包路径”)或者 @ComponentScan 指定扫描路径

@SpringBootApplication启动类注解 全等于
@SpringBootConfiguration(配置注解)
@EnableAutoConfiguration(springboot把所有符合条件的配置都加载到当前springboot创建并使用的IOC容器中)
@ComponentScan(“包路径,扫描包的注解”)

容器功能

1组件添加
@Configuration
基本使用
Full模式与Lite模式
配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的

  • 2、配置类本身也是组件
  • 3、proxyBeanMethods:代理bean的方法
  •  Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
    
  •  Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
    
  •  组件依赖必须使用Full模式默认。其他默认是否Lite模式
    

@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件`

public class MyConfig {

    /**
     * Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
     * @return
     */
    @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
    public User user01(){
        User zhangsan = new User("zhangsan", 18);
        //user组件依赖了Pet组件
        zhangsan.setPet(tomcatPet());
        return zhangsan;
    }

    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }
}


2、@Bean、@Component、@Controller、@Service、@Repository

3.@ComponentScan、@Import(*.class数组)
@Import({User.class, DBHelper.class})
给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
通过快速导入的方式实现把实例加入spring的IOC容器中

4@Conditional
条件装配,满足@Conditional对应的条件则进行组件注入
@ConditionalOnMissingBean(name = “tom”)
没有组件名为tom才进行注入

5 原生配置文件引入
@ImportResourc
@ImportResource(“classpath:beans.xml”)原生配置文件路径

6配置绑定
使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用;
@ConfigurationProperties

/**
 * 只有在容器中的组件,才会拥有SpringBoot提供的强大功能
 */
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {

    private String brand;
    private Integer price;


-------
或者
@EnableConfigurationProperties(Car.class)
//1、开启Car配置绑定功能
//2、把这个Car这个组件自动注册到容器中
public class MyConfig {
}

自动配置原理

@EnableAutoConfiguration再来看看这个注解
点进去

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}

@AutoConfigurationPackage

@Import(AutoConfigurationPackages.Registrar.class)  //给容器中导入一个组件

@Import(AutoConfigurationImportSelector.class)

1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
2、调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类
3、利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件
4、从META-INF/spring.factories位置来加载一个文件。
	默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
    spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories
    

修改默认配置

        @Bean
		@ConditionalOnBean(MultipartResolver.class)  //容器中有这个类型组件
		@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
		public MultipartResolver multipartResolver(MultipartResolver resolver) {
            //给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
            //SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
			// Detect if the user has created a MultipartResolver but named it incorrectly
			return resolver;
		}
给容器中加入了文件上传解析器;

SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先

总结:
• SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
• 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定
• 生效的配置类就会给容器中装配很多组件
• 只要容器中有这些组件,相当于这些功能就有了
• 定制化配置
• 用户直接自己@Bean替换底层的组件
• 用户去看这个组件是获取的配置文件什么值就去修改。
xxxxxAutoConfiguration —> 组件 —> xxxxProperties里面拿值 ----> application.properties

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot是一个简化Spring应用开发的框架,它通过自动配置的方式来减少开发者的工作量,提高开发效率。SpringBoot自动配置的原理是什么呢? 首先,SpringBoot自动配置是基于SpringBoot的starter依赖功能实现的。starter依赖本质上是一个Maven项目,里面包含了一些依赖和必要的资源,只需将这个项目引入到应用中,就能自动加载依赖并进行一些默认配置Spring Boot框架中一些核心的starter依赖包括spring-boot-starter-web、spring-boot-starter-data-jpa、spring-boot-starter-data-redis等等,开发者可以根据自己的需要引入合适的starter依赖。 其次,SpringBoot自动配置是基于条件注解实现的。条件注解是Spring框架提供的一种特殊注解,它能够根据指定的条件来判断是否需要加载某个组件或配置Spring Boot中,提供了很多条件注解,如@ConditionalOnClass、@ConditionalOnProperty等等,它们可以根据类是否存在、属性是否配置等条件来决定是否加载某个组件或配置。 最后,SpringBoot自动配置还包含了一些默认的配置,这些默认配置可以通过自定义配置来覆盖或扩展。例如,在使用spring-boot-starter-web时,SpringBoot会默认配置Tomcat容器来运行Web应用,如果开发者需要使用其他容器如Jetty或Undertow,可以写一个配置类来覆盖默认配置。 综上所述,SpringBoot自动配置是基于starter依赖、条件注解和默认配置实现的。它大大减少了开发者的工作量,提高了开发效率,同时也保证了应用的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值