是Spring啊!

news2024/11/16 17:47:26

一.概念


    • spring概念

一个包含了众多工具方法的 IoC 容器

okk~~分析一下这句话意思,众多方法,IoC 是形容词,容器是名词 ->

众多方法:比如一个类里有许多方法, 容器:存储的东西 重点就是IoC是什么?

    • Ioc

2.1解释

IoC -> Inversion of Control 控制反转 -> 对象的生命周期 -> 控制权: 由程序猿 变为 Spring IoC

简单来说 Java里的对象的创造和销毁都是被程序猿掌控的, 但是IoC的话 就变了, 掌控这些的不是程序猿了,而是Spring

2.2 意义

所以,把对象的生命周期的控制权交出去了,有什么好处?

~解耦合!!!!

每个对象都要程序猿创建,如果1的创建需要2,2的创建需要3..... 那么当代码出现异常,76出现了bug - > 前面的1到75就会都有问题产生 -> 所以这个时候,好处显而易见

~并且,对象的生命周期交给IoC维护, 作为程序猿无需关注

    • DI

其实IoC只是一个思想, 那么具体的实现其实是 DI

DI -> Dependency Injection 依赖注入

IoC DI 从不同的维度描述了同一件事 比如->我的计划和实际操作(我要学会一门乐器->钢琴十级了现在)


二.创建一个Spring项目

1.复杂的创建

1.1.创建

1.1.1创建一个maven项目
1.1.2添加spring配置文件

spring.xml的代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
 </dependencies>

1.1.3创建spring对象
1.1.4将对象配置到spring中
1.1.5得到spring对象
1.1.6获取spring对象
1.1.7使用一下

1.2. 注意事项

1.3. ApplicationContext BeanFactory区别

ApplicationContext BeanFactory 区别:

* 相同:

都可以实现从容器中获取 bean, 都提供了 getBean的方法

* 不相同:

* 1.ApplicationContext 是 BeanFactory 的子类,

* BeanFactory提供了基础访问 Bean的方法

* ApplicationContext 除了拥有 BeanFactory的所有功能外,还提供了更多的方法,对国际化的支持,资源访问支持...

* 2.性能方面

* BeanFactory 按需加载 Bean

* ApplicationContext饿汉模式, 创建的时候所有 Bean都加载了(貌似是智能的,电脑空间够,才行,不够的话,还是按需加载)

2.简单的创建

2.1创建 - 5大类注解

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--                                       所有beans存放的位置-->
    <content:component-scan base-package="beans"></content:component-scan>
</beans>

2.1.2 5大类注解
2.1.2.1 5大类注解

@Controller 控制器 业务逻辑层

@Service 服务 服务层

@Repository 仓库 持久层

@Configuration 配置 配置层

@Component 组件

2.1.2.2 5大类注解的意义

@Configuration -> @Controller 控制器 (前端参数的校验) -> @Service(数据的组装,接口的调用) -> @Repository(和数据库进行交互)

可以让代码可读性提高, 让程序员快速知道当前类的用途

比如 Java里的 @Override 看到就知道被标注的方法重载了父类的方法

2.1.2.3 5大类注解的关系

其他四个类本身是属于 @Component 的“⼦类”--看源码

2.1.3 解释

public static void main(String[] args) {
        String name1 = "user";
        String name2 = "USER";
        System.out.println(Introspector.decapitalize(name1));
        System.out.println(Introspector.decapitalize(name2));
    }

2.2创建-使用方法注解@Bean

2.2.1使用方法注解@Bean

2.2.2 重命名 Bean

设置 name 属性给 Bean 对象进⾏重命名

2.2.3 注意事项

* Bean 的命名规则 :

* 当没有设置 name属性时, 那么 bean的默认名称时方法名

* 通过重命名的 name属性对应值来获取后, 只能用重命名, 不能再用方法名

name={} 可以省略


* Bean 的命名可以起多个名字 :

但是会有问题--同⼀类型多个 @Bean 报错

* @Bean 将一个类型的对象注入多次

* 解决方案三个

* 1. 精确的描述 bean的名称

* 2. 使用 @Resource设置 name的方法来重新命名注入对象 @Resource(name="user")

* 3. 使用 @Autowired+ @Qualifier来筛选 bean对象

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

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

相关文章

Git版本控制工具详解

1、版本控制 1.1、认识版本控制&#xff08;版本控制&#xff09; 什么是版本控制&#xff1f; 版本控制的英文是Version control&#xff1b;是维护工程蓝图的标准作法&#xff0c;能追踪工程蓝图从诞生一直到定案的过程&#xff1b;版本控制也是一种软件工程技巧&#xff…

红米 12C earth 秒解锁 跳过168小时 红米note12 note12pro note12pro+系列机型解锁bl root教程步骤Fastboot

最近上手体验了Redmi 12C/红米12C&#xff0c;这是红米新推出的百元机&#xff0c;起售价699元&#xff0c;464G版本&#xff0c;具有不错的性能&#xff0c;具有5000mAh大电池&#xff0c;具有双频wifi&#xff0c;支持双卡双待&#xff0c;支持SD卡扩展等。 如果你近期想要给…

UTF-8和Unicode

文章目录Unicode与网络传输Unicode网络传输UTF&#xff1a;Unicode Transformation Format UTF-8是在网络上传输Unicode的一个转换标准&#xff0c;发送时将字符串Unicode转为UTF-8&#xff0c;接收时将字节转为Unicode&#xff0c;就完成来字符串的传输 Unicode与网络传输 U…

移动端 - 搜索组件(search-list篇)

移动端 - 搜索组件(search-input篇) 移动端 - 搜索组件(suggest篇) 这里我们需要去封装搜索历史组件 这一个组件还是很简单的, 但是逻辑部分需要根据实际的需求来进行书写; 所以这里我不太好去写实际的代码, 不过可以提供我的思路(主要的就是去实现增, 删, 改, 查) 第一步: 首…

【STL】string的常见接口使用

目录 1、string类的基础概念 2、string类的常见接口说明及应用 2.1、string类的成员函数 constructor&#xff08;构造函数&#xff09; destructor&#xff08;析构函数&#xff09; operator&#xff08;赋值&#xff09; string类对象的容量操作 迭代器 string类…

【vue2】组件基础与组件传值(父子组件传值)

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;组件基础概念与全局|局部组件的写法、组件之间传值&#xff08;父传子、子传父&#xff…

rcfile和orcfile

一、数据存储要考虑哪些方面 数据加载时间 Facebook数仓每天存储的数据量超过20TB&#xff0c;数据加载既有磁盘I/O又有网络传输&#xff0c;时间占用大 快速的数据查询 低的空间占用 数据压缩/数据编码 适合多种查询模式 如果所有人都查相同的字段&#xff0c;那么就可以针…

QT添加使用图片与UI资源

QT添加使用图片与UI资源1 QT添加使用图片资源1.1 添加新文件1.2 添加QT - QT Resources File 【UI资源文件】1.3 命名资源包名称 并 添加到项目文件1.4 .pro 文件发生变化 art.qrc1.5 点击qrc文件&#xff0c;添加现有文件 - 添加进去的图片文件可以进行正常引用。1.6 修改样式…

分布式任务处理xxljob

7.1 分布式任务处理 7.1.1 什么是分布式任务调度 视频上传成功需要对视频的格式进行处理&#xff0c;如何用Java程序对视频进行处理呢&#xff1f;这里有一个关键的需求就是当视频比较多的时候我们如何可以高效处理。 如何去高效处理一批任务呢&#xff1f; 1、多线程 多线…

通过Docker启动DB2,并在Spring Boot整合DB2

1 简介 DB2是IBM的一款优秀的关系型数据库&#xff0c;简单学习一下。 2 Docker安装DB2 为了快速启动&#xff0c;直接使用Docker来安装DB2。先下载镜像如下&#xff1a; docker pull ibmcom/db2:11.5.0.0 启动数据库如下&#xff1a; docker run -itd \--name mydb2 \--…

Allegro如何导入和导出Pin Delay操作指导

Allegro如何导入和导出Pin Delay操作指导 在做PCB设计等长设计的时候,Pin Delay是个非常重要的数据,关系到信号的长度,Allegro支持把Pin Delay数据导入到PCB中,并且还支持导出,如下图 具体操作如下 导入Pin Delay,选择File选择Import

图论基础: 邻接矩阵与邻接表(c++实现)

文章目录邻接矩阵邻接表邻接矩阵 邻接矩阵&#xff08;Adjacency Matrix&#xff09;是表示顶点之间相邻关系的矩阵。 设G(顶点&#xff0c;边)&#xff1a;G(V,E)是一个图。其中V{v1,v2,…,vn} [1] 。G的邻接矩阵是一个具有下列性质的n阶方阵&#xff1a; 无向图的邻接矩阵…

手眼标定,9点标定过程及其运算

在工业领域常常会遇到将相机安装在机器手中&#xff0c;由相机快速引导机器手进行工作的方式。其中9点标定的作用是将图像的坐标转化为机器手的坐标。 9点标定的作用意义&#xff1a; 1.计算像素当量&#xff0c;通过9点标定后的计算&#xff0c;可以得出一个由像素值转化为机器…

水平分表、分库和垂直分表、分库和公共表的代码实现和讲解

文章目录一、环境准备二、水平分表1.概念2.代码三、水平分库1.概念2.代码四、垂直分表1.概念2.代码五、垂直分库1.概念2.代码六、公共表1.概念2.代码一、环境准备 操作系统&#xff1a;Win10数据库&#xff1a;MySQL5.7JDK&#xff1a;64位 jdk1.8.0_202应用框架&#xff1a;s…

DOS和DDOS攻击和防御(ATTACK)

目录 一、DOS攻击和DDOS攻击的区别 第一、我们可以从他们两个的英文全称上来看初步的区别 第二、攻击方法不同 二、DOS和DDOS攻击的实现方式 1.DOS攻击 1、SYN Flood(是DOS和DDOS攻击方式之一) 2、UDP洪水攻击 3、Ping洪流攻击 4、teardrop攻击 5、Land攻击 6、Smurf攻击 7、Fr…

【 uniapp - 黑马优购 | 登录与支付 1】登录组件布局实现、用户信息布局与渲染

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;讨厌编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;见文末 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;…

设计模式-原型模式

设计模式-原型模式一 官方定义二 案例演示解决方案一 - 一般实现方式实现过程案例分析解决方案二使用场景实现过程一实现过程 二案例分析三 浅拷贝和深拷贝浅拷贝问题演示实现过程案例分析解决方案-----深拷贝实现方式一&#xff1a;重写clone()方法扩展思考一 官方定义 原型模…

在VMware 虚拟机(Win7)中还原真机Ghost备份的Win10系统

要求&#xff1a; 将真机Ghost备份的Win10系统还原到VMware安装的虚拟机&#xff08;Win7&#xff09;上 真机&#xff08;物理机&#xff09;&#xff1a;win10pro_pure_20220709.GHO &#xff08;备份的GHO文件&#xff09;&#xff1b;安装模式&#xff1a;Win10UEFIGPT 虚…

HashMap源码学习:红黑树原理详解

前言 JDK1.8后的HashMap引入了红黑树&#xff0c;在学习HashMap源码之前&#xff0c;了解了红黑树原理&#xff0c;及其如何通过代码进行实现后&#xff0c;在整体的看HashMap的源码就会简单很多。 概述 红黑树的特性 根节点必须是黑色节点。节点是红色或黑色。所有叶子都是…

Redis原理

Redis内部使用的是文件事件处理器file event handler,它是单线程的,所以Redis叫做单线程模型。它采用IO多路复用机制同时监听多个socket,将产生事件的socket压入内存队列中,事件分派器根据socket上的事件类型来选择对应的事件处理器进行处理。文件事件处理器包含4个部分:多…