闲散小计-spring和springboot

spring和springboot的区别

Spring是一个综合性的框架,它提供了一个集成了多种技术的完整框架,并提供了一系列的扩展点和API来满足高度定制化的需求。Spring以依赖注入和面向切面编程为核心,提供了全面的技术支持,包括JDBC、ORM、事务管理、Web 开发、消息中间件、安全框架等等。

而Spring Boot是在Spring框架的基础上进行了封装和扩展,可以简化Spring应用的搭建和部署。Spring Boot提供了自动化配置、微服务开发、嵌入式Web服务器、监控等特性,让开发者更加关注业务逻辑而不是繁琐的配置,Spring Boot旨在实现“约定优于配置”。

可以具体地理解为,使用Spring Framework作为框架是需要自己配置各种组件,需要花费较多时间去学习和配置;而使用Spring Boot不需要配置,只需要少量的代码就能够快速构建Spring应用。因此,Spring Boot更适合快速开发和构建中小型应用,而Spring Framework则更适用于构建大型复杂应用。

spring的ioc和aop

Spring提供了两个核心特性:IOC(Inversion of Control)和AOP(Aspect Oriented Programming)。

IOC:即控制反转,它是一种用于优化代码结构和降低代码之间的耦合度的技术。在传统的开发中,一个对象通常需要自己主动创建所需要的依赖对象,即控制创建过程。而使用IOC后,对象不需要自己主动去创建所需的依赖对象,而是通过IoC容器来创建并注入依赖。这样依赖对象的实现细节被封装在IoC容器内部,对象间的耦合性得到了降低,方便维护和修改。

AOP:即面向切面编程,它是一种程序设计思想,它运用切面来对代码进行横向的抽取分离,在关注业务代码的同时,对横切逻辑进行解耦和重用。在使用AOP时,程序员只关注核心业务代码的编写,而整个应用中所有的日志、权限验证等横切关注点则与业务代码相互独立,以独立的方式在切面中进行。通过AOP,程序员能够更容易将应用的各个层次中的功能模块相互解耦,将关注点模块化。

在Spring框架中,通过IOC容器来管理类实例,通过依赖注入(DI)来实现对类之间依赖关系的解耦;同时,Spring AOP提供了在面向对象程序中实现切面需求的功能。通过IOC和AOP这两个核心特性,Spring框架使得开发者能够更加关注业务逻辑的实现,而无需忙于处理一些常规性的代码重复和框架调用。

SpringBoot的配置文件及加载顺序

如何读取SpringBoot配置文件的值

1·@Value

2.@ConfigurationProperties(prefix="前缀")

读取多个配置值时(封装一个实体类,在上面加上@ConfigurationProperties注解)

SpringBoot多环境配置

在主配置文件中
spring:
	profiles:
		active:指定的配置

springBoot自动装配原理

Spring Boot 的自动装配是靠一些预设的套路或配置来避免重复的开发过程,从而提高了开发的效率和稳定性。这样,对开发者来说,就不用关心太多细节,只需要按照套路来定义一些特定的 Bean 和配置即可,大部分开发过程都能自动完成。下面详细介绍 Spring Boot 自动装配的原理。

1. @Configuration 和 @Conditional 注解

在 Spring Boot 中,应用程序的入口通常是一个带有 @SpringBootApplication 注解的主配置类。

@SpringBootApplication 是一个组合注解,内部包含了 @ComponentScan、@SpringBootConfiguration 和 @EnableAutoConfiguration 三个注解

其中 @EnableAutoConfiguration 是 Spring Boot 实现自动装配的核心注解。

在该注解中,主要使用的是 @Import 注解将 AutoConfigurationImportSelector 类导入到 Spring 容器中,并通过接口 Environment 和类 ClassParsingRequest 判断一些自动配置类是否需要进行添加。

这里的 @Import 注解允许动态导入类(可以导入配置类的路径),从而动态创建、管理实例,满足复杂的依赖注入需求

@ConditionalOn 系列注解是 SpringBoot 提供的非常重要的注解之一,
用于在 Spring Boot 自动装配模块中控制 Bean 的加载条件,起到精细控制、灵活配置的作用,
可以根据指定的条件对 Bean 进行特定的创建或者排除等。

@ConditionalOnClass
@ConditionalOnClass 注解表示如果指定的 Class 存在于 classpath 中,则该注解所表示的配置类中
的整个配置都会生效。例如,使用了 @ConditionalOnClass(MySQLDataSource.class) 注解,当项目的
classpath 中存在 MySQLDataSource 类时,指定的配置就会生效。

@ConditionalOnMissingClass
@ConditionalOnMissingClass 注解表示如果指定的 Class 不存在于 classpath 中,则该注解所表示
的配置类中的整个配置才会生效。例如,使用了 @ConditionalOnMissingClass(MySQLDataSource.class)
注解,当项目的 classpath 中不存在 MySQLDataSource 类时,指定的配置就会生效。

@ConditionalOnBean
@ConditionalOnBean 注解表示如果指定的 Bean 存在于 Spring 容器中,则该注解所表示的配置类中的
整个配置都会生效。例如,使用了 @ConditionalOnBean(MySQLDataSource.class) 注解,当 Spring 
容器中存在 MySQLDataSource 类的 Bean 时,指定的配置就会生效。

@ConditionalOnMissingBean
@ConditionalOnMissingBean 注解表示如果指定的 Bean 不存在于 Spring 容器中,则该注解所表示的配
置类中的整个配置才会生效。例如,使用了 @ConditionalOnMissingBean(MySQLDataSource.class)注解,
当 Spring 容器中不存在 MySQLDataSource 类的 Bean 时,指定的配置就会生效。

@ConditionalOnProperty
@ConditionalOnProperty 注解表示可以根据指定的属性判断该注解所表示的配置类的整个配置是否生效,
该注解支持前缀匹配。
例如,使用了 @ConditionalOnProperty(prefix = "spring.datasource", name = "url") 注解,
则当 application.properties 或者 application.yml 中存在以 spring.datasource.url 为前缀的
属性时,该注解所表示的配置就会生效。

总之,@ConditionalOn 系列注解可以通过细化的配置来控制程序的生命周期、配置文件的选择等等,使得
Spring Boot 的自动装配更加灵活、易用、可配置,适应不同的开发场景和需求,也使得我们在编写代码时
更加便捷和灵活 

@Conditional 在 Spring Boot 中是一个非常重要的条件注解,它允许程序员在运行时更改 Spring Boot 的自动配置信息,以适应不同的应用场景。通过 @Conditional 注解,程序员可以创建自己的条件化自动配置类,从而实现一个非常灵活的、可配置的 SpringBoot 应用。@Conditional 注解接口也是 Spring Boot 实现自动装配的重要接口,通过该接口可以根据特定的条件判断是否需要装配某些 Bean。

2. 自动配置文件

Spring Boot 的自动配置文件是在 classpath 下的 META-INF/spring.factories 文件中定义的,通过该文件中定义的配置类和条件注解,Spring Boot 可以自动装配 Spring 的各种组件、第三方库等。
自动配置文件的主要作用是自动配置,而这个配置包括的信息非常丰富,既有需要注入到 Spring IoC 容器中的 Bean,也有需要在 Spring 启动的时候执行的操作等。

3. 自动加载机制

在 Spring Boot 中,自动装配是通过多个自动装配模块完成的,其中每个模块都包含了一组自动装配的功能。每个自动装配模块中都包括了一

些标记类和配置类,标记类用于表示该模块需要自动装配的范围,而配置类用于提供自动装配的实现。
在 Spring Boot 中,各个自动装配模块之间是互相独立、可集成的。这些自动装配模块都是基于 Spring Boot 自动装配机制实现的,他们接受一些配置,并据此自动检测、装配相应的组件,从而减轻了开发者的负担。
在启动时,Spring Boot 会通过 Classpath 扫描机制加载自动装配的类,并将其放到 BeanDefinitionMap 中,最终通过回调 ConfigurableListableBeanFactory 中的 postProcessBeanDefinition 方法对所有的 Bean 进行后处理,完成自动装配的过程。
总之,Spring Boot 的自动装配机制结合了多种技术,使得应用程序的配置变得非常的灵活。Spring Boot会加载一系列有序的属性配置文件application.properties yml,读取这些属性文件中的内容,并根据配置文件的内容自动装配项目中所需要的组件和开发者所需的功能。这种自动装配的机制大大降低了开发人员的负担,提高了软件的开发效率和代码的质量。

SpringBoot自动配置简单总结

当我们SpringBoot项目启动的时候,会加载引导类(启动类),它上面有@SpringBootApplication的注解,@SpringBootAPplication是一个组合注解,它包含了@ComponentScan(默认扫描配置类同级的包及其子包)、@SpringBootConfiguration(指定当前类也是一个配置类)和@EnableAutoConfiguration三个注解;其中@EnableAutoConfiguration(开启自动配置)是Spring Boot实现自动装配的核心注解,@EnableAutoConfiguration它其中有两个注解:@AutoConfigurationPakage(扫描当前工程下的相关配置)和@Import(导入配置),springBoot会去找所有依赖下的META-INF下的spring.factories文件中(EnableAutoConfiguration下)需要加载的候选配置类,但这些类会经过筛选:

  1. 先去除重复的
  2. 再去除指定排除的(exclude排除的)
  3. 然后通过条件注解过滤( @ConditionalOnClass @ConditionalOnMissingClass @ConditionalOnBean @ConditionalOnMissingBean @ConditionalOnProperty)

筛选通过的类就会被spring boot加载(@Import(导入配置))

项目中如何自己封装starter
  • 创建Maven工程 导入spring-boot-start核依赖
  • 在Resources文件下创建META-INF/spring.factories文件, 文件中设置key为EnableAutoConfiguration(固定)和对应的配置类全路径
  • 配置类上课按需求设置@ConditionalOnXxx条件和@Configuration, 配置类中可设置任意多个@Bean,(找到该配署类就会加载这些Bean
  • 然后打ar包,在T程中引入 并设置的Conditional条件即可获取自定义starter中的配署类

即:在recources中创建 META-INF ,创建spring.factories文件,在EnableAutoConfiguration下写上要配置类的全限定类名

资料来源:百度/b站  侵删

有不对和欠缺的地方还望大佬们指正,致谢!!

  • 41
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值