Spring-Spring、IoC、DI、注解开发
1、Spring是什么
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。
Spring整体架构

Spring优点:
- Spring属于
低侵入设计。 - IOC将对象之间的依赖关系交给Spring,
降低组件之间的耦合,实现各个层之间的解耦,让我们更专注于业务逻辑。 - 提供
面向切面编程。 - 对各种主流插件提供很好的集成支持。
- 对事务支持的很好,只要配置即可,无须手动控制
缺点:
依赖反射,影响性能
以前所有东西都是由程序去进行控制创建,
耦合性太高(模块与模块之间的依赖性太强,需求改一个模块,实际需要改好几个模块),而现在是由我们自行控制创建对象 , 把主动权交给了调用者。程序不用去管怎么创建,怎么实现了。它只负责提供一个接口
问题:耦合度高
解决办法:使用对象时,在程序中不要主动使用new产生对象,转换由外部提供对象
2、IOC
控制反转IoC(Inversion of Control),是一种设计思想(对象的产生控制权由程序转移到外部)
控制:谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring(
core containner)来创建的
反转:程序本身不创建对象 , 而变成被动的接收对象
Spring对IoC思想进行了实现
- Spring提供了一个容器,称为
IoC容器,用来充当IoC思想中的“外部” - IoC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为
Bean - 如果两个bean之间有关系,进行DI(依赖注入)
2.1、使用IoC
- 在resources路径下创建applicationContext.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"><bean id="stu" class="com.zyh.pojo.Student"></bean>
</beans>
- IOC容器通过读取配置文件,加载配置bean标签来创建对象(在核心容器中创建好bean对象后,就放在核心容器中,需要使用的时候再拿出去用)
- 读取配置文件
//读取配置文件ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Student stu = applicationContext.getBean("stu", Student.class);System.out.println(stu);
2.2、IoC容器创建bean(实例化bean)的三种方法
- 无参构造函数:构造方法(常用),无参构造方法如果不存在,将抛出异常BeanCreationException
<bean id="bookDao" class="com.src.dao.impl.BookDaoImpl"/>
- 静态工厂
<bean id="bookDao" class="com.src.factory.OrderDaoFactory" factory-metod="getOrderDao"/>
- 实例工厂:先造出工程实例对象
<bean id="userFactory" class="com.src.factory.userDaoFactory"/>
<bean id="userDao" factory-method="getUserDao" factory-bean="userFactory">
2.3、Bean生命周期
-
初始化容器
1.创建对象〔内存分配)
2.执行构造方法
3.执行属性注入( set操作,依赖注入)
4.执行bean初始化方法 -
使用bean
1.执行业务操作
-
关闭/销毁容器
1.执行bean销毁方法
3、DI
依赖注入(Inversion of Control)在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
- setter注入
在bean中定义引用类型属性并提供可访问的set方法
public class BookSeviceImpl implements BookService{private BookDao bookDao;public void setBookDao(BookDao bookDao){this.bookDao = bookDao;}
}
配置中使用property标签ref属性注入引用类型对象
配置中使用property标签value属性注入简单类型对象
<bean id = "bookService" class="com.org.example.service.impl.serviceImpl"><property name = "bookDao" ref = "bookDao"/>
</bean>
<bean id = "bookDao" class="com.org.example.dao.impl.BookDaoImpl">
- 构造器注入
配置中使用constructor-arg标签ref属性注入引用类型对象
public class BookSeviceImpl implements BookService{private BookDao bookDao;public BookServiceImpl(BookDao bookDao){//构造方法this.bookDao = bookDao;}
}
<bean id = "bookService" class="com.org.example.service.impl.serviceImpl"><constructor-arg name = "bookDao" ref = "bookDao"/>
</bean>
<bean id = "bookDao" class="com.org.example.dao.impl.BookDaoImpl">
3.1 自动装配
IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
1、自动装配用于引用类型注入,不能对简单类型进行操作
2、使用按类型装配(byType)必须保障容器中相同类型的bean唯一,推荐使用
3、使用按名称装配(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐
4、自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效


4、注解开发
在类上加上@Component就相当于对这个类定义为bean了
需要在配置文件中加上<context : compontent-scan base-package="com.org.example">
Spring提供@Component注解的三个衍生注解
- @Controller:用于表现层bean定义
- @Service:用于业务层bean定义
- @Repository:用于数据层bean定义

相关文章:
Spring-Spring、IoC、DI、注解开发
1、Spring是什么 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 Spring整体架构 Spring优点: Spring属于低侵入设计。IOC将对象之间的依赖关系交给Spring,降低组件之间的耦合,实现各个层之间的解耦,让我们更专注于业务…...
Facebook的未来蓝图:从元宇宙到虚拟现实的跨越
随着科技的不断演进和社会的数字化转型,虚拟现实(VR)和增强现实(AR)作为下一代计算平台正逐渐走进人们的视野。作为全球领先的科技公司之一,Facebook正在积极探索并推动这一领域的发展,以实现其…...
Redis6.2.1版本集群新加副本
测试数据 通过redis-benchmark生成测试数据 ./bin/redis-benchmark -h 172.31.4.18 -p 6381 -a Redis_6.2.1_Sc --cluster -t set -d 128 -n 10000000 -r 100000000 -c 200新加节点 172.31.4.18:6381> AUTH Redis_6.2.1_Sc OK172.31.4.18:6381> cluster meet 172.31.4…...
2.The DispatcherServlet
The DispatcherServlet Spring的Web MVC框架与许多其他Web MVC框架一样,是请求驱动的,围绕一个中央Servlet(即DispatcherServlet)设计,该Servlet将请求分派给控制器,并提供其他功能以促进Web应用程序的开发…...
bug定位策略
前提--用户环境层面 hosts异常:hosts文件主要是加快某个域名或者网站的解析速度,从而达到快速访问的作用,也可以屏蔽网站。hosts异常可能会导致部分网页无法访问,能够加载,但是网页无法正常显示;测试环境脏…...
基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例
在水利、环境、生态、机械以及航天等领域中,数学模型已经成为一种常用的技术手段。同时,为了提高模型的性能,减小模型误用带来的风险;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…...
内存函数(C语言)
内存函数 以下函数的头文件:string.h 针对内存块进行处理的函数 memcpy 函数原型: void* memcpy(void* destination, const void* source, size_t num);目标空间地址 源空间地址num,被拷贝的字节个数 返回目标空间的起始地…...
力扣 哈希表刷题回顾
哈希表理论总结 什么时候用哈希表,快速判断一个元素是否出现在集合中时,用哈希这种空间换时间的方法。 哈希函数与哈希碰撞 哈希函数是指将key映射到对应的哈希表上 哈希碰撞是指映射的过程中容易出现多对一的情况,用什么方法解决拉链法和…...
Qt 统计图编程
学习目标:Qt 折线图,柱形图和扇形统计图编程 学习基础 Qt QChart 曲线图表操作-CSDN博客 学习内容 Qt中绘制三种常见的图表非常方便, 主要步骤如下: 1. 折线图: - 使用QLineSeries定义折线数据,添加多个坐标点 - 使用QValueAxis创建X轴和Y轴 - 将…...
SQL中的谓词与谓词下推
在 SQL 查询中,谓词(Predicate)是用来对数据进行过滤的条件。它们决定了数据从数据库表中被选择的条件。理解和正确使用 SQL 谓词对于编写高效查询至关重要。 目录 什么是谓词?一个真实的故事SQL 谓词的代码示例比较谓词逻辑谓词…...
浅聊授权-spring security和oauth2
文章目录 前言自定义授权spring security授权oauth2授权概述 前言 通常说到授权,就会想到登录授权、token令牌、JWT等概念,授权。顾名思义就是服务器授予了客户端访问资源的权益,那么要实现授权有几种方案呢,三种授权方式在公司项…...
时间复杂度计算
目录 时间复杂性 ⼤O的渐进表⽰法 时间复杂性 定义:在计算机科学中,算法的时间复杂度是⼀个函数式T(N),它定量描述了该算法的运⾏时间。 时间复杂度是衡量程序的时间效率,那么为什么不去计算程序的运⾏时间呢? 1.…...
React 18 + Babel 7 + Webpack 5 开发环境搭建
文章目录 一、基础开发环境搭建1. 新建项目目录2. 项目目录结构及内容3. 安装 React 18 Babel 7 Webpack 54. 配置 Babel 和 Webpack5. 调试/构建项目 二、扩展项目支持的能力(待补充)1. JS 扩展(待补充)2. CSS 扩展(…...
MongoDB Shard 集群 Docker 部署
MongoDB Shard Docker 部署 部署环境 主机地址主机配置主机系统Mongodb1/192.168.31.1352CPU 4GBDebian12Mongodb2/192.168.31.1092CPU 4GBDebian12Mongodb3/192.168.31.1652CPU 4GBDebian12 镜像版本 mongodb/mongodb-community-server:5.0.27-ubuntu2004 部署集群 部署…...
MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示
MacOS 开发 — Packages 程序 macOS新版本 演示选项卡无法显示 问题描述 : 之前写过 Packages 的使用以及如何打包macOS程序。最近更新了新的macOS系统,发现Packages的演示选项卡无法显示,我尝试从新安转了Packages 也是没作用,…...
Hive的分区表分桶表
1.分区表: 是Hive中的一种表类型,通过将表中的数据划分为多个子集(分区),每个分区对应表中的某个特定的列值,可以提高查询性能和管理数据的效率。分区表的每个分区存储在单独的目录中,分区的定义…...
PostgreSQL17索引优化之支持并行创建BRIN索引
PostgreSQL17索引优化之支持并行创建BRIN索引 最近连续写了几篇关于PostgreSQL17优化器改进的文章,其实感觉还是挺有压力的。对于原理性的知识点,一方面是对这些新功能也不熟悉,为了尽可能对于知识点表述或总结做到准确,因此需要…...
在Vue中,子组件向父组件传递数据
在Vue中,子组件向父组件传递数据通常通过两种方式实现:事件和回调函数。这两种方式允许子组件与其父组件进行通信,传递数据或触发特定的行为。 1. 通过事件传递数据 子组件可以通过触发自定义事件,并将数据作为事件的参数来向父组…...
数据结构(顺序表)
谈起顺序表,那我们就不得不先来了解一下它的上级概念---线性表 线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列…...
MySQL之基本查询(上)-表的增删查改
目录 Create(创建) 案例建表 插入 单行数据 指定列插入 单行数据 全列插入 多行数据 全列插入 插入是否更新 插入时更新 替换 Retrieve(读取) 建表插入 select列 全列查询 指定列查询 查询字段为表达式 为查询结果指定别名 结果去重 where条件 比较运算符 逻辑运…...
全面解锁《鸣潮》游戏潜力:WaveTools工具箱新手使用指南
全面解锁《鸣潮》游戏潜力:WaveTools工具箱新手使用指南 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 想要在《鸣潮》中获得更流畅的游戏体验和更精细的画质控制吗?WaveTools鸣潮…...
塞尔达存档定制工具:解锁海拉鲁冒险的无限可能
塞尔达存档定制工具:解锁海拉鲁冒险的无限可能 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 在海拉鲁大陆的冒险旅程中,每个玩家都曾面临…...
实战指南:基于快马平台用PostgreSQL的JSONB字段构建灵活的产品管理系统
今天想和大家分享一个实战项目经验:如何用PostgreSQL的JSONB字段为电商网站构建灵活的产品管理系统。这个方案特别适合产品属性差异大的场景,比如同时卖手机和书籍的电商平台。 为什么选择JSONB字段 电商网站经常遇到一个头疼问题:不同品类的…...
告别Frida注入:手把手教你用IDA和010 Editor修改TikTok的libsscronet.so实现抓包(Android 30.8.4)
静态逆向实战:不依赖Frida修改TikTok核心通信模块实现抓包 在移动安全研究领域,动态注入工具如Frida一直是分析应用协议的主流选择。但当面对TikTok这类采用自研通信协议的应用时,频繁的版本更新会导致动态注入方案需要持续维护。本文将展示一…...
COMSOL超声仿真:检测焊缝缺陷的实践与探索
COMSOL超声仿真:检测焊缝缺陷 版本为5.6一、引言在制造业中,焊缝的质量和完整性是产品性能的重要保证。然而,由于焊缝的复杂性和微小缺陷的隐蔽性,传统的检测方法往往难以准确、高效地识别出潜在问题。近年来,随着计算机仿真技术的…...
mybatis-config.xml:<configuration> 内部标签只能按这个顺序写:
二、必须严格遵守的标签顺序(死规定)propertiessettingstypeAliasestypeHandlersobjectFactoryobjectWrapperFactoryreflectorFactorypluginsenvironments(数据库环境)databaseIdProvidermappers(映射器)...
效率利器:借助快马平台为极域课堂快速打造一站式密码管理助手
最近在帮学校的信息技术老师处理极域课堂管理系统v6.0的密码管理问题时,发现老师们经常需要处理三类高频需求:快速生成符合要求的密码、评估现有密码强度、解答常见密码问题。传统做法要么依赖纸质记录,要么需要临时编写脚本,效率…...
零基础友好:在快马平台上手把手学openclaw机器人抓取入门
零基础友好:在快马平台上手把手学openclaw机器人抓取入门 最近想研究机器人抓取技术,发现openclaw这个库对新手特别友好。作为一个完全没接触过机器人编程的小白,我在InsCode(快马)平台上找到了快速入门的方法。这个平台最棒的地方是不用配置…...
【PCB设计】STM32开发板电源模块设计实战——从原理图到布局优化
1. STM32开发板电源模块设计概述 第一次设计STM32开发板电源模块时,我犯了个低级错误——把LDO的输入输出电容接反了,结果上电瞬间芯片就冒了烟。这个惨痛教训让我意识到,电源模块虽然只占PCB面积的10%,却决定了整个系统90%的稳定…...
终极指南:如何快速为设计添加地图填充效果 - Sketch Map Generator 插件完全解析
终极指南:如何快速为设计添加地图填充效果 - Sketch Map Generator 插件完全解析 【免费下载链接】sketch-map-generator Sketch plugin to fill a shape with a map generated from a given location using Google Maps and Mapbox 项目地址: https://gitcode.co…...
