Spring系统框架

news2024/11/17 0:49:10

Spring Framework系统架构

在这里插入图片描述

1.Spring核心概念

代码书写现状

耦合度偏高

解决方案

使用对象时,在程序中不要主动使用new产生对象,转换为外部提供对象

IOC(Inversion of Control)控制反转

对象的创建控制权由程序移到外部,这种思想称为控制反转

解耦

Sping技术对Ioc思想进行了实现

Spring提供了一个容器,称为IOC容器用来充当IOC思想中的“外部”

IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOc容器中同称Bean

DI(Dependency Injection)依赖注入

在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

在这里插入图片描述

目标:充分解藕

使用IOC容器管理bean(IOC )

在ioc容器内将有依赖关系的bean进行关系绑定

最终效果:

使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

IOC入门案例思路分析

  1. 管理什么?(Service与Dao)
  2. 如何被管理的对象告知IOC容器(配置)
  3. 被管理的对象交给IOC容器,如何获取IOC容器?接口
  4. IOC容器得到后,如何从容器中获取bean?(接口方法)
  5. 使用Spring导入那些坐标?(pom.xml)

2.bean的配置

bean基础配置

bean别名配置

bean作用范围配置

在这里插入图片描述
在这里插入图片描述

为什么bean默认为单例?

适合交给容器进行管理的bean

表现层对象

业务层对象

数据层对象

工具对象

不适合交给容器进行管理的bean

封装实体的域对象

3.bean实例化

bean是如何创建的,实例化bean的三种方式

第一种:bean本质上就是对象,创建bean使用构造方法完成

第二种:使用静态工厂

在这里插入图片描述

第三种 实例工厂实例化bean

第四种 使用FactoryBean实例化Bean(第三种方法的变种)

Public clas UserDaoFactoryBean implements FactortyBean<UserDao>{
    public UserDao getObject() throws Exception{
        return new UserDaoImpl();  //获得bean的实例的
    }
    public Class<?>getObjectType(){
        return UserDao.class;//获得bean 的类型的
    }
    public boolean isSingleton(){
	return false;//true 返回的是单例对象,false返回的不是单例对象
    }
}

在这里插入图片描述

4.bean的生命周期

生命周期:从创建到消亡的完整过程

bean生命周期Lbean从创建到销毁的整体过程

bean 生命周期控制:在bean创建后到销毁前做一些事情

在这里插入图片描述

在这里插入图片描述

初始化容器

1.创建对象(内存分配)

2.执行构造方法

3.执行属性注入(set操作)

4.执行bean初始化方法

使用bean

1.执行业务操作

关闭/销毁容器

1.执行bean销毁方法

在这里插入图片描述

在这里插入图片描述

5.setter注入(依赖注入)

向一个类中传递数据的方法有几种

普通方法(set)

构造方法

思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或字符串呢?

引用类型

简单类型(基本数据类型与String)

依赖注入方式

setter注入

简单类型

引用类型

构造器注入

简单类型

引用类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

依赖注入方式选择

1.强制依赖使用构造器进行,setter注入有概率不进行注入导致null对象出现

2.可选依赖使用setter注入进行,灵活性强

3.Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式数据初始化,相对严谨

4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖,使用setter注入完成可选依赖的注入

5.实际开u发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入

6.自己开发的模块推荐使用setter注入

6.自动装配

Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配

自动装配方式

按类型(常用)

按名称

按构造方法

不启用自动装配

在这里插入图片描述

自动装配用于引用类型依赖注入,不能对简单类型进行操作

只有按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用

使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用

自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

7.集合注入

在这里插入图片描述

引用类型

在这里插入图片描述

8.核心容器总结‘

BeanFactory是IOC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载

ApplicationContext接口时Spring容器的核心接口,初始化时bean立即加载

ApplicationContext接口时提供基础的bean’操作相关方法,通过其他接口扩展其功能

ApplicationContext接口常用初始化类

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext

在这里插入图片描述

延迟加载

ApplicationContext接口时Spring容器的核心接口,初始化时bean立即加载

ApplicationContext接口时提供基础的bean’操作相关方法,通过其他接口扩展其功能

ApplicationContext接口常用初始化类

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙实战:页面跳转

文章目录 1. 实战概述2. 实现步骤2.1 创建项目2.2 准备图片素材2.3 编写首页代码2.4 创建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 实战概述&#xff1a;本实战通过ArkUI框架&#xff0c;在鸿蒙系统上开发了一个简单的两页面应用。首页显示问候语和“下一页”按钮&…

文献解读-DNAscope: High accuracy small variant calling using machine learning

关键词&#xff1a;基准与方法研究&#xff1b;基因测序&#xff1b;变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;DNAscope: High accuracy small variant calling using machine learning标题&#xff08;中文&#xff09;&#xff1a;DNAsc…

程序设计方法与实践-变治法

变换之美 变治法就是基于变换的思路&#xff0c;进而使原问题的求解变得简单的一种技术。 变治法一般有三种类型&#xff1a; 实例化简&#xff1a;将问题变换为同问题&#xff0c;但换成更为简单、更易求解的实例。改变表现&#xff1a;变化为同实例的不同形式&#xff0c;…

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url

解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url 第一类情况 在anaconda创建新环境时&#xff0c;使用如下代码 conda create -n charts python3.7 错误原因&#xff1a; 默认镜像源访问速度过慢&#xff0c;会导致超时从而导致更新和下载失败。 解决方…

Spring Boot框架:电商系统的技术革新

4 系统设计 网上商城系统的设计方案比如功能框架的设计&#xff0c;比如数据库的设计的好坏也就决定了该系统在开发层面是否高效&#xff0c;以及在系统维护层面是否容易维护和升级&#xff0c;因为在系统实现阶段是需要考虑用户的所有需求&#xff0c;要是在设计阶段没有经过全…

wordpress下载站主题推荐riproV5 wordpress日主题

iPro主题全新V5版本&#xff0c;是一个优秀且功能强大、易于管理、现代化的WordPress虚拟资源商城主题。支持首页模块化布局和WP原生小工具模块化首页可拖拽设置&#xff0c;让您的网站设计体验更加舒适。同时支持了高级筛选、自带会员生态系统、超全支付接口等众多功能&#x…

微服务即时通讯系统的实现(客户端)----(1)

目录 1. 项目整体介绍1.1 项目概况1.2 界面预览和功能介绍1.3 技术重点和服务器架构 2. 项目环境搭建2.1 安装Qt62.3 安装vcpkg2.3 安装protobuf2.4 构建项目2.5 配置CMake属性 3. 项目核心数据结构的实现3.1 创建data.h存放核心的类3.2 工具函数的实现3.3 创建编译开关 4. 界面…

2024年11月15日

1.计算机网络 逻辑右移 做加减法 定点乘法 原码乘法运算 一位乘 计组 2.英语六级

算法定制LiteAIServer摄像机实时接入分析平台玩手机打电话检测算法:智能监控的新篇章

在现代社会&#xff0c;随着智能手机的普及&#xff0c;无论是在工作场所还是公共场所&#xff0c;玩手机或打电话的行为日益普遍。然而&#xff0c;在某些特定环境下&#xff0c;如工厂生产线、仓库、学校课堂等&#xff0c;这些行为可能会影响到工作效率、安全或教学秩序。为…

算法--解决二叉树遍历问题

第一 实现树的结构 class Node(): # 构造函数&#xff0c;初始化节点对象&#xff0c;包含数据和左右子节点 def __init__(self, dataNone): self.data data # 节点存储的数据 self.left None # 左子节点&#xff0c;默认为None self.rig…

深度学习基础—Beam search集束搜索

引言 深度学习基础—Seq2Seq模型https://blog.csdn.net/sniper_fandc/article/details/143781223?fromshareblogdetail&sharetypeblogdetail&sharerId143781223&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 上篇博客讲到&#xff0c;贪心算…

C++__day1

1、思维导图 2、如果登录失败&#xff0c;提示用户登录失败信息&#xff0c;并且提示错误几次&#xff0c;且重新输入&#xff1b;如果输入错误三次&#xff0c;则退出系统 #include <iostream> using namespace std;int main() {string id , pswd;string user"admi…

【机器学习】数学知识:欧式距离(Euclidean Distance)和曼哈顿距离(Manhattan Distance)

欧式距离和曼哈顿距离是两种常用的距离度量方法&#xff0c;用于衡量两点之间的相似性或差异性。它们在几何分析、数据挖掘、机器学习等领域有广泛应用。 1. 欧式距离 概念 欧式距离&#xff08;Euclidean Distance&#xff09;是最常见的直线距离度量方法&#xff0c;源于欧…

Java之JDBC,Maven,MYBatis

前言 就是用来操作数据库的 1.JDBC快速入门 注意在使用前一定要导入jar包 在模块那里新建目录&#xff0c;新建lib&#xff0c;粘贴复制jar包&#xff0c;我这个jar设置的是模块有效 package test1017;import java.sql.Connection; import java.sql.DriverManager; import…

JavaWeb笔记整理——Spring Task、WebSocket

目录 SpringTask ​cron表达式 WebSocket SpringTask cron表达式 WebSocket

【大数据学习 | HBASE高级】rowkey的设计,hbase的预分区和压缩

1. rowkey的设计 ​ RowKey可以是任意字符串&#xff0c;最大长度64KB&#xff0c;实际应用中一般为10~100bytes&#xff0c;字典顺序排序&#xff0c;rowkey的设计至关重要&#xff0c;会影响region分布&#xff0c;如果rowkey设计不合理还会出现region写热点等一系列问题。 …

如何实现主备租户的无缝切换 | OceanBase应用实践

对于DBA而言&#xff0c;确保数据库的高可用性、容灾等能力是其日常工作中需要持续思考和关注的重要事项。一方面&#xff0c;可以利用数据库自身所具备的功能来实现这些目标&#xff1b;若数据库本身不提供相应功能&#xff0c;DBA则需寻找其他工具来增强数据库的高可用性和容…

Spring 中的 BeanDefinitionParserDelegate 和 NamespaceHandler

一、BeanDefinitionParserDelegate Spring在解析xml文件的时候&#xff0c;在遇到<bean>标签的时候&#xff0c;我们会使用BeanDefinitionParserDelegate对象类解析<bean>标签的内容&#xff0c;包括<bean>标签的多个属性&#xff0c;例如 id name class in…

MQTT从入门到精通之MQTT Dashboard

MQTT Dashboard 1 Dashboard简介 EMQX 提供了一个内置的管理控制台&#xff0c;即 EMQX Dashboard。方便用户通过 Web 页面就能轻松管理和监控 EMQX 集群&#xff0c;并配置和使用所需的各项功能。 访问地址&#xff1a;http://ip:18083 首次登录访问账号&#xff1a;admin…

Flume和kafka的整合

1、Kafka作为Source 【数据进入到kafka中&#xff0c;抽取出来】 在flume的conf文件夹下&#xff0c;有一个flumeconf 文件夹&#xff1a;这个文件夹是自己创建的 创建一个flume脚本文件&#xff1a; kafka-memory-logger.conf Flume 1.9用户手册中文版 — 可能是目前翻译最完…