当前位置: 首页 > news >正文

SpringBoot底层原理

传统构建应用程序

传统的项目构建是需要Spring中提供众多的子项目来构建Spring应用程序,Spring Framework提供核心功能,其他的负责数据获取消息传递等等,其他的子项目都依赖于Spring Framework,整合成一个完整的项目

随着业务需求的复杂化,大型化,传统的方式已经不再满足,比如,

  • 导入依赖繁琐:需要手动引入依赖,并且jar包互相有冲突
  • 项目配置繁琐:还需要写大量相应的配置文件.xml,在applicationContext.xml中要声明大量的bean对象,因为使用Spring这些对象,要先声明在使用

SSM框架 

SSM框架作为传统的构建应用程序框架,Spring + Spring MVC + MyBatis是传统 Java Web 开发的经典组合框架。

Spring Framework是Spring中最核心基础的部分。

IOC(控制反转)

下面展示了代码编写过程中耦合度偏高的状况,因为来了新的数据,而要修改bookDao的对象,就要重新编写代码,重新测试,重新确定逻辑,非常麻烦,所以我们使用对象是,尽量不要主动new创建对象,要转换为外部提供对象,保证低耦合度

而IOC的思想就是使用对象时,有主动new创建对象转换为由外部提供对象,此过程中对象创建控制权有程序转移到外部,整个过程的目的就是充分解耦

spring提供了一个容器,成为IOC容器,充当IOC思想中的外部,用于管理对象的创建和初始化的过程

而由IOC容器创建和管理的对象成为Bean

DI(依赖注入):在容器中简历bean和bean之间的依赖关系的过程,比如,dao层要依赖于service层实现save方法,而两个bean都在IOC容器中,所以IOC容器就为两个bean创建了依赖关系

IOC实例分析

1.导入Spring的坐标Spring-context之后再去 配置文件

2.创建Spring配置文件applicationContext.xml,在文件中配置Bean,告诉IOC容器哪些Bean是要管理的

3.初始化并获取IOC容器,并告诉IOC容器相关的配置信息在applicationContext.xml文件中

4.获取bean,并运行方法

DI案例分析

5.

6.即可以创建Dao的对象

7.在配置文件中描述Service于Dao层的关系

Bean

bean的作用范围说明了bean默认是单例模式,即同一个Bean对象创建出来的Dao指向同一地址,避免每管理一个bean都创建新的对象,浪费大量内存

Bean的实例化的三种方式

Spring创建bean的时候,调用的的是无参构造方法

Bean扫描

扫描主要有两种方式

  • 标签:
  • 注解:

!!@ComponentScan的扫描范围是所在的包及其子包

为什么启动类只有一个注解?因为它相当于三个注解

--》

Bean注册

有以下四种衍生方式注入到IOC容器中

注册第三方

可是,与要想注册的对象来自于第三方(不是自定义的),是无法用@Component即衍生注解声明Bean的,就衍生出一下两种方式声明第三方对象

@Bean:要想将第三方对象注入到IOC容器中,就要在该方法创建新对象的时候,加上@Bean对象,将方法的返回值交给IOC容器管理,成为IOC容器的管理对象,

另外,如果要采用@Bean方法注册,不建议在启动类中,在配置类中集中注册

@Import:只需要@Import(xxx.class)就可以将xxx类中的bean对象自动注入的IOC容器中,开发中更多的是导入配置类和ImportSelector接口实现类

Bean的注册条件

bean只有在封装数据的时候才有意义,所以注入的bean必须在下面三种常用方式下才算有意义

SpringBoot

与传统构建项目相比,Springboot就是Spring的一个子项目,用于快速构建应用程序,有以下特点

起步依赖:sb提供一个起步依赖,整合了一个功能所需要的其他依赖,一节更比六节强!

自动配置:遵循约定大于配置原则,boot程序启动后,一些bean对象会自动注入到IOC容器中,不用手动声明

其他特性

整合Mybatis

1.导入mybatis起步依赖,boot会自动注入bean对象到IOC容器

2.在.yml的文件中写数据库相关的配置,包括数据库的驱动,数据库的连接,数据库的用户名和密码等配置

3.

相关文章:

  • AndroidStudio 下载
  • 大疆上云api直播功能如何实现
  • Linux文件目录管理指令详解(上篇)
  • STM32学习笔记之存储器映射(原理篇)
  • Langchain 历史消息和会话管理
  • 简单一周日期展示及选择切换
  • 定时任务框架选型指南:Quartz、Elastic-Job 与 XXL-JOB 深度对比与场景实践
  • vue对文件进行加密,后台解密后保存
  • EFK日志分析
  • 操作系统 :Linux基础开发工具
  • LLM之Agent(十四)| 字节开源ComputerUse纯视觉驱动GUI 智能体模型 UI-TARS
  • file io(I)
  • 数据类设计_图片类设计之8_自由图形类设计_(前端架构)
  • 云资源开发学习应用场景指南,场景 1 云上编程实践平台
  • 【Linux网络(五)】传输层协议
  • 说说MyBatis一、二级缓存和Spring一二级缓存有什么关系?
  • Vue Router动态改变路由参数的两种方法
  • 装饰器模式介绍和典型实现
  • k8s常用命令
  • js的闭包
  • 无锡住房建设网站/网络自动推广软件
  • 手机网站怎么开发工具/百度seo培训课程
  • 开发公司代收业主契税如何记账/北京网站优化服务
  • 做网站的如何兼职/nba赛程排名
  • 沙特网站后缀/市场推广方案ppt
  • jsp做网站教程/优化培训内容