在哔站黑马程序员学习Spring—Spring Framework—(一)核心容器(core container)学习笔记

news2025/4/16 11:05:13

一、spring介绍

        spring是一个大家族全家桶,spring技术是JavaEE开发必备技能。spring技术解决的问题:一是简化开发,降低企业级开发的复杂性。二是框架整合,高效整合其他技术,提高企业级应用开发与运行效率。

        spring技术要学习以下内容: 

 spring大家族全家桶(生态圈):

 主要学习以下技术:

Spring Framework:是spring最早出现的技术,其他所有的spring技术都是依赖于spring framework执行的,它是一个底层的框架,所有东西都能够放在spring framework上运行,所以spring framework在spring大家族中具有决定性作用。

Spring Boot:spring能够简化开发,而使用springboot能够在简化开发的基础上加速开发,springboot是用来提高开发速度的,能够让原先的spring开发变得更加简单,书写更少的东西。

 Spring Cloud:分布式开发相关技术。

 二、Spring Framework

(一)spring framework系统架构图

系统架构中上层依赖于下层

(二)spring framework学习路线

 (三)第一部分:核心容器学习

核心概念:IoC(控制反转)/DI(依赖注入)、IoC容器、Bean

1、IoC(控制反转):

 以前的问题:当数据层的实现改变后,这时带来一个问题,业务层的实现相关代码必须要改变,这就导致原代码改变,这时就需要重新测试,重新部署,重新发布,这些工作都需要成本。而导致这个问题的根本原因:是在业务层的实现里面出现了其他类的代码,导致耦合度变高。

IoC容器:把对象放在IoC容器里面,由IoC容器帮助去创建对象,当业务层中要使用对象时,IoC容器给对象就行了。IoC容器管理大量的对象,管理对象的创建和初始化,包括service和dao,这些对象统一叫作Bean

2、DI(依赖注入):

 当使用service对象时是依赖于dao对象的,通过DI把dao数据层和service服务层这两个对象建立起依赖关系,这时使用service对象时可以直接获得dao对象。

使用spring实现IoC思想的入门案列:

将被管理的对象告知IoC容器(使用配置文件applicationContext.xml告知)(文件名任取)

1.导入spring的依赖包并刷新maven:

 

 2.新建spring的xml文件:

3. 在配置文件中配置bean:

4. 在app中获取IoC容器并通过IoC容器获取到bean对象:

 案列代码详细步骤如下:

 

 

 

 

 但是此时只是实现了IoC,并没有解耦,也就是业务层代码中仍然是new一个对象,这时就需要使用到DI依赖注入来充分解耦。

使用spring实现 DI 的入门案列:

 

 

  案列代码详细步骤如下:

 

 




3、bean的相关知识:

bean基础配置、bean别名配置、bean作用范围配置

bean别名配置: 

name属性可以为bean取更多的别名,也就是多个名字。

 

 bean的作用范围是用来控制创建的实例对象的数量的。

spring在帮我们管理对象的时候只创建一个内容对象,第一次使用后下一次还是使用的上一次的,这样不仅效率高,对内存也友好。

bean的创建(实例化的三种形式)

bean实质上是对象,创建bean使用构造方法完成(容器中管理的对象叫bean)

第一种实例化bean的方式——构造方法(常用):

以前创建对象是new+构造方法

对于spring来说也是使用构造方法来创建bean的,但是是无惨的构造方法,且不管是private还是public都可以运行(涉及到反射的工作原理)。

 

第二种实例化bean的方式——使用静态工厂(早些年做程序的常用方式),了解即可:

 

 这样的对象spring如何管理???

 

 

 第三种实例化bean的方式——使用实例工厂初始化bean,不再是静态的。

 

 第四种实例化bean的方式—— spring改良(第三种方式的改进版本,使得配置spring时简单)(务必要掌握):

 

 

 

 bean生命周期:

 



依赖注入方式:

 上面已经总结了使用setter注入,通过使用setter方法使得dao数据层对象传入到service服务层中。

 

 使用构造器(构造方法)注入:就不再需要setter方法,而是在构造方法里面传入对象或数据,其他是一样的,但是在配置文件中,配置bean的写法不一样。

 

 注意:自己写程序的时候最好使用setter方式注入对象或数据。



依赖自动装配:

spring帮助我们自动进行依赖注入,所以在spring的配置文件中就不再需要我们自己注入,也就是删掉<property>的代码,从此只需一个<bean>即可配置完成一个bean对象。

 提示:学完注解更简单,不再需要以上代码。

集合注入:数组、List、Set、Map、Properties

 

 注意:集合的注入使用频率很低

 第三方数据源对象管理:第三方传递过来的bean如何管理

核心:探索连接池对象

 第二个案例:c3p0的数据源

需要导入两个pom坐标: 

 但是:这种方法不是最终方法,因为这种方法可以看见密码用户名等数据,而常用方法是使用properties文件。

 

 那么对于spring应该如何读取这个properties文件呢??
spring加载properties文件:

1.开启一个全新的context命名空间

2.使用context空间加载properties文件

3.使用属性占位符${ } 读取properties文件中的属性



容器相关操作:

 



 核心容器大总结(core container)

三大部分:容器相关、bean相关、依赖注入相关

 

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

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

相关文章

git revert和git reset的差异点和区别

git revert 定义 撤销某次提交,此次撤销操作和之前的commit记录都会保留。 git revert会根据commitid找到此次提交的变更内容&#xff0c;并撤销这些变更并作为一次新commit提交。 ps:此次commit和正常commit相同&#xff0c;也可以被revert revert和reset有本质的差别&#…

使用C#开发ChatGPT聊天程序

使用C#开发ChatGPT聊天程序 总体效果如下&#xff1a; 源码下载 关键点1&#xff1a;无边框窗口拖动 Window中设置AllowsTransparency"True"、 Background"Transparent"以及WindowStyle"None"这样设置的话默认窗口的标题栏为不可见状态&…

cocos tween

缓动接口Tween 属性和接口说明接口说明接口功能说明tag为当前缓动添加一个数值类型&#xff08;number&#xff09;的标签to添加一个对属性进行 绝对值 计算的间隔动作by添加一个对属性进行 相对值 计算的间隔动作set添加一个 直接设置目标属性 的瞬时动作delay添加一个 延迟时…

Spring Cloud服务发现组件Eureka

简介 Netflix Eureka是微服务系统中最常用的服务发现组件之一&#xff0c;非常简单易用。当客户端注册到Eureka后&#xff0c;客户端可以知道彼此的hostname和端口等&#xff0c;这样就可以建立连接&#xff0c;不需要配置。 Eureka 服务端 添加Maven依赖&#xff1a; <…

菜谱分享APP/基于android菜谱分享系统

摘 要随着现代生活水平的不断提升&#xff0c;人们越来越关注健康,关注美食,大部分人都希望吃得美味的同时也要吃得健康,所以,有的人喜欢在家自己动手制作美食,但是却缺少这方面的资讯来源。菜谱分享APP是一个使用Hbuildex作为手机客户端和后台服务系统的开发环境, MySQL作为后…

Node.js+Vue.js全栈开发王者荣耀手机端官网和管理后台(一)

文章目录【全栈之巅】Node.jsVue.js全栈开发王者荣耀手机端官网和管理后台(一)工具安装和环境搭建初始化项目基于ElementUI的后台管理基础界面搭建创建分类&#xff08;客户端&#xff09;创建分类&#xff08;服务端&#xff09;分类列表分类编辑分类删除子分类【全栈之巅】No…

Bubbles原理解析

官方文档 https://developer.android.com/develop/ui/views/notifications/bubbles#the_bubble_api 气泡使用户可以轻松查看和参与对话。 气泡内置于通知系统中。 它们漂浮在其他应用程序内容之上&#xff0c;无论用户走到哪里都会跟随他们。 气泡可以展开以显示应用程序功能和…

如何搭建春节值班智能通知方案

春节期间&#xff0c;为了保证业务的正常运转&#xff0c;或者及时响应用户/客户需求&#xff0c;许多公司会安排一些人员轮流进行值班&#xff0c;解决一些突发情况或者问题。在过去&#xff0c;一般是排好值班表后&#xff0c;全靠人工自觉上线进行值班&#xff0c;容易遗忘或…

干货,游戏DDoS攻击趋势及原因分析,附防御案例

我曾看到充满激情的创业团队、一个个玩法很有特色的产品&#xff0c;被这种互联网攻击问题扼杀在摇篮里&#xff1b; 也看到过一个运营很好的产品&#xff0c;因为遭受DDoS攻击&#xff0c;而一蹶不振。这也是为什么想把自己6年做游戏行业DDoS的经验&#xff0c;与大家一起分享…

网络的基础认知

日升时奋斗&#xff0c;日落时自省 目录 1、网络发展史 1.1、独立模式 1.2、局域网 1.3、广域网 2、网络通信基础 2.1、IP地址 2.2、端口号 2.3、协议 2.4、网络协议分层 2.4.1、协议类别 2.4.2、TCP和UDP区别 2.5、分层理解事例 2.5.1 封装 2.5.2分用 2.5.3、总…

114. 二叉树展开为链表

114. 二叉树展开为链表 难度中等 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先…

04 链式队列的实现

带头节点的链式队列&#xff1a; 初始化&#xff1a;rear和front指针都指向头节点入队&#xff1a;向rear指向的节点后插入新节点&#xff0c;并让rear指针移动指向新的队尾节点出队&#xff1a;front指针始终指向头节点&#xff0c;即删除头节点后一个节点&#xff1b;最后一个…

Arduino,Nodemcu,ESP8266网络连接(局域网),网页控制内部LED状态变化

整体思路&#xff08;无线终端模式&#xff09; 需要注意&#xff1a;esp8266是 802.11n⽀支持**(2.4GHz )&#xff0c;也就是平常说的wifi4&#xff0c;WiFi5G是连不上的** 配置指定的LED接口&#xff0c;配置网络的WiFi&#xff0c;记录ESP8266模块做为服务器的IP&#xff0…

2022某站百大up主公布名单,python如何快速获取up名单

前言 2022年已经过去&#xff0c;各大厂商都在做年度总结。某站在1月13日中午19点30分公布了2022百大UP主名单&#xff0c;那么今年的某站年度UP主都是谁呢&#xff1f;接下来就让我们一起了解一下吧。不过&#xff0c;我们去用python获取名单&#xff0c;是非常有成就的。 环…

Git(1)基础命令

Git基础知识总结 Author&#xff1a;onceday date&#xff1a;2022年8月8日 满满长路有人对你微笑过嘛… Modified date&#xff1a;2022年11月22日&#xff0c;完成第一章部分内容。 windows安装可参考文章&#xff1a;git简易配置_onceday_CSDN博客 參考文档&#xff1a…

腾讯云短信服务——获取验证码

引言 之前介绍过阿里云短信服务&#xff0c;传送门&#xff1a;阿里云短信服务——短信发送验证码&#xff0c;但是由于阿里云现在短信调用门槛较高&#xff0c;申请有很多限制&#xff08;我申请好几次都没有通过&#xff09;&#xff0c;所以只能使用测试账号给固定的手机号…

2023速卖通开店入驻流程及费用,新店运营思路

开店前准备 从卖家开始注册账户起&#xff0c;需速卖通平台的销售政策和全球速卖通平台规则。平台要求卖家在速卖通经营需遵循公平、诚实的行事原则&#xff0c;以确保安全的购买及销售体验。 1.注册账号 注册账户前&#xff0c;以下所有资料都是必须提供的资料。若资料不完…

AtCoder Beginner Contest 044(4/4)

Tak and Hotels (ABC Edit)前k晚花费x&#xff0c;k1晚以后花费yAC代码&#xff1a;import java.util.*; import java.io.*; public class Main {public static void main(String[] args) {InputStream inputStream System.in;OutputStream outputStream System.out;InputRea…

喜报 | 迅镭激光荣获2022年度江苏省科学技术奖

1月6日&#xff0c;江苏省科技厅发布了2022年度江苏省科学技术奖综合评审结果公示名单&#xff0c;迅镭激光与江苏师范大学等单位合作的“高功率2微米激光器关键技术及应用”项目&#xff0c;荣获2022年度江苏省科学技术二等奖。 江苏省科学技术奖是省内科技领域最高级别的奖项…

Java 23种设计模式(1.设计模式概念和UML)

1. 设计模式概念 软件设计模式&#xff08;Software Design Pattern&#xff09;&#xff0c;又称设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 1.1 设计模式学习必要性理由 设计模式的本质是面向对象设计原则的实际运用&#xff0c;是对类的…