Spring框架中的bean管理(XML和注解及属性的注入)
Spring框架中IOC就是将创建对象的权力反转给Spring框架,我们无需自己创建对象,直接在Spring框架的容器中获取即可。
bean中配置的就是需要让Spring管理的类。
XML的bean管理
先写个“HelloWorld”:
<bean id="User" class="com.ffyc.spring.model.User" scope="singleton"><property name="id" value="11"></property><property name="name" value="aaa"></property><constructor-arg name="id" value="111"></constructor-arg><constructor-arg name="name" value="aaa"></constructor-arg></bean>
上面代码的含义就是创建单例的User对象,并且实现了依赖注入。bean依赖注入的两种方式:一种是属性的set方法注入(property标签),通过Java反射机制(所以前提是User类中必须存在当前属性的set方法),为属性赋值。另一种是构造方法的注入(constructor-arg标签),通过类中的构造方法赋值。
以上代码描述了通过bean标签实现通过Spring创建对象并赋值,称为依赖注入(Dependency Injection)DI。
在实际开发中并没有如此简单,例如在一个类中调用另一个类,使用bean标签该如何处理呢?
public class UserService {UserDao userDao;public void saved(){userDao.save();}
}
<bean id="UserDao" class="com.ffyc.spring.Dao.UserDao"></bean><bean id="UserService" class="com.ffyc.spring.Service.UserService"><property name="userDao" ref="UserDao"></property></bean>
如上我们新建UserDao类和UserService类,在UserService类中调用UserDao类中的方法,使用bean管理这两个类。
使用XML我们发现工作量太大,如果模块很多,那每次加入一个模块就要添加一个bean。
使用注解进行bean管理
<context:component-scan base-package="com.ffyc.spring"></context:component-scan>
在Spring中配置当前标签,就可以通过注解,自动扫描指定包下的类,可自动解析注解。
模型类:
@Data
@Component("User")
@Scope("prototype")
public class User {private Integer id;private String name;}
数据访问层:
@Data
@Repository("userDao")
public class UserDao {public void save() {System.out.println("保存成功!");}
}
Service层:
@Data
@Service("userService")
public class UserService {@Autowired //属性的注入@Qualifier("userDao")UserDao userDao;public void saved(){userDao.save();}
}
各层类使用不同的注解标签和名字。在Spring框架中,一般把由Spring框架管理创建的对象称为一个bean对象,与我们普通的对象不同,因为Spring框架可以进行功能上的增强。
补充:Spring为了每层更加清晰,(为了后续的扩展功能,在不同层使用不同的注解标记)
模型类:@Compontent
Service层:@Service
数据访问层:@Repository
Spring中注解的自动注入:
两种方式:
1,@Autowired Spring框架中提供的注解标签,可以提供两种方式进行属性注入。
①bean名称注入 @Qualifier(value="bean名称")
@Data
@Service("userService")
public class UserService {@Autowired //属性的注入@Qualifier("userDao")UserDao userDao;public void saved(){userDao.save();}
}
@Data
@Repository("userDao")
public class UserDao {Integer id;String name;public void save() {System.out.println("保存成功!");}
}
②属性类型注入,如果没有指定名称,那么就是属性类型去容器中查找对应类型对象(常用)
@Data
@Service("userService")
public class UserService {@Autowired //属性的注入UserDao userDao;public void saved(){userDao.save();}
}
@Data
@Repository
public class UserDao {Integer id;String name;public void save() {System.out.println("保存成功!");}
}
2,@Resource JDK提供的注解标签
没有给定指定名称,就通过类型查找注入,若给定,则通过名称注入
@Data
@Service("userService")
public class UserService {@ResourceUserDao userDao;public void saved(){userDao.save();}
}
@Data
@Repository
public class UserDao {Integer id;String name;public void save() {System.out.println("保存成功!");}
}相关文章:
Spring框架中的bean管理(XML和注解及属性的注入)
Spring框架中IOC就是将创建对象的权力反转给Spring框架,我们无需自己创建对象,直接在Spring框架的容器中获取即可。 bean中配置的就是需要让Spring管理的类。 XML的bean管理 先写个“HelloWorld”: <bean id"User" class"com.ffyc.…...
MySQL 存储过程提高数据库效率和可维护性
MySQL 存储过程是一种强大的数据库功能,它允许你在数据库中存储和执行一组SQL语句,类似于编程中的函数。存储过程可以大幅提高数据库的性能、安全性和可维护性。本文将详细介绍MySQL存储过程的使用。 什么是MySQL存储过程? MySQL存储过程是一…...
JAXB的XmlElement注解
依赖 如果基于JAX-WS开发,可以在maven工程的pom.xml文件中增加如下依赖,会将依赖的JAXB库也下载下来: <dependency><groupId>jakarta.xml.ws</groupId><artifactId>jakarta.xml.ws-api</artifactId><vers…...
竞赛选题 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python
文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的驾…...
59 权限提升-Win溢出漏洞及ATSCPS提权
目录 知识点必备:windows权限认识(用户及用户组)0x01 普通权限0x02特殊权限 演示案例:基于WEB环境下的权限提升-阿里云靶机基于本地环境下的权限提升-系统溢出漏洞基于本地环境下的权限提升-AT&SC&PS命令 案例给到的思路点总结如下:涉及资源: 这个章节会讲到…...
【新闻稿】Solv 与 zCloak 联合开发跨境贸易场景下可编程数字凭证项目,获得新加坡、加纳两国央行支持...
关于昨天 Solv 携手 zCloak 与新加坡和加纳两个央行合作的 Project DESFT,很多朋友都发来恭喜和祝福,并希望了解详情。这个事我们秘密努力了半年多,终于有一个阶段性的成果。这里我转载中文版官宣新闻稿,欢迎大家关注。等我忙过这…...
requests库进行爬虫ip请求时遇到的错误解决方法
问题背景 在使用requests库进行HTTP请求时,用户遇到了一个AuthenticationRequired(身份验证必须)的错误。然而,当使用urllib.request.urlopen执行相同的操作时,却能够成功。同时,用户提供了自己的系统信息…...
目标检测—YOLO系列(二 ) 全面解读论文与复现代码YOLOv1 PyTorch
精读论文 前言 从这篇开始,我们将进入YOLO的学习。YOLO是目前比较流行的目标检测算法,速度快且结构简单,其他的目标检测算法如RCNN系列,以后有时间的话再介绍。 本文主要介绍的是YOLOV1,这是由以Joseph Redmon为首的…...
Redis维护缓存的方案选择
Redis中间件常常被用作缓存,而当使用了缓存的时候,缓存中数据的维护,往往是需要重点关注的,尤其是重点考虑的是数据一致性问题。以下是维护数据库缓存的一些常用方案。 1、先删除缓存,再更新数据库 导致数据不一致的…...
LeetCode236. Lowest Common Ancestor of a Binary Tree
文章目录 一、题目二、题解 一、题目 Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest…...
基于Gin+Gorm框架搭建MVC模式的Go语言企业级后端系统
文/朱季谦 环境准备:安装Gin与Gorm 本文搭建准备环境:GinGormMySql。 Gin是Go语言的一套WEB框架,在学习一种陌生语言的陌生框架,最好的方式,就是用我们熟悉的思维去学。作为一名后端Java开发,在最初入门…...
【开源】基于Vue和SpringBoot的固始鹅块销售系统
项目编号: S 060 ,文末获取源码。 \color{red}{项目编号:S060,文末获取源码。} 项目编号:S060,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固…...
Windows11怎样投屏到电视上?
电视屏幕通常比电脑显示器更大,能够提供更逼真的图像和更震撼的音效,因此不少人也喜欢将电脑屏幕投屏到电视上,缓解一下低头看电脑屏幕的烦恼。 Windows11如何将屏幕投射到安卓电视? 你需要在电脑和电视分贝安装AirDroid Cast的电…...
ubuntu中用docker部署jenkins,并和码云实现自动化部署
1.部署jenkins docker network create jenkins docker run --name jenkins-docker --rm --detach \--privileged --network jenkins --network-alias docker \--env DOCKER_TLS_CERTDIR/certs \--volume jenkins-docker-certs:/certs/client \--volume jenkins-data:/var/jen…...
for,while,do-while,死循环,嵌套循环,跳转关键字,随机数
1.for循环 public class ForDemo1 {public static void main(String[] args) {for (int i 0; i < 5; i) {System.out.println("HelloWorld");}System.out.println("--------------------------------------------");for (int i 1; i <10 ; i) {Sy…...
【六袆 - MySQL】SQL优化;Explain SQL执行计划分析;
Explain SQL执行计划分析 概念:English Unit案例分析1.分析的SQL2.执行计划分析 【如图】MySQL执行计划参数以及它们的影响或意义:概念: MySQL执行计划(Execution Plan)是数据库系统根据查询语句生成的一种执行策略,用于指导数据库引擎执行查询操作。 English Unit This…...
【AI视野·今日NLP 自然语言处理论文速览 第六十二期】Wed, 25 Oct 2023
AI视野今日CS.NLP 自然语言处理论文速览 Wed, 25 Oct 2023 (showing first 100 of 112 entries) Totally 100 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers MuSR: Testing the Limits of Chain-of-thought with Multistep Soft R…...
各种符号地址,可以直接复制粘贴使用
字符符号 - 文本数字工具 | 偷懒工具 toolight.cn...
C语言测试题:用冒泡法对输入的10个字符由小到大排序 ,要求数组做为函数参数。
编写一个函数: 用冒泡法对输入的10个字符由小到大排序 ,要求数组做为函数参数。 冒泡排序是一种简单的排序算法,它会多次遍历要排序的数列, 每次遍历时,依次比较相邻的两个元素,如果它们的顺序不符合要求…...
uni-app开发微信小程序 vue3写法添加pinia
说明 使用uni-app开发,选择vue3语法,开发工具是HBliuderX。虽然内置有vuex,但是个人还是喜欢用Pinia,所以就添加进去了。 Pinia官网连接 添加步骤 第一步: 在项目根目录下执行命令: npm install pinia …...
PyTorch 2.8镜像环境配置:CUDA 12.4与cuDNN 8+版本兼容性验证指南
PyTorch 2.8镜像环境配置:CUDA 12.4与cuDNN 8版本兼容性验证指南 1. 镜像环境概述 PyTorch 2.8深度学习镜像是一个经过深度优化的通用计算环境,专为现代AI工作负载设计。这个镜像最显著的特点是完美适配了NVIDIA最新的CUDA 12.4和cuDNN 8版本ÿ…...
Ubuntu系统优化下的LiuJuan20260223Zimage高性能部署
Ubuntu系统优化下的LiuJuan20260223Zimage高性能部署 本文基于Ubuntu 22.04 LTS系统测试,适用于NVIDIA GPU环境 1. 环境准备与系统优化 在开始部署LiuJuan20260223Zimage之前,我们先对Ubuntu系统进行一些基础优化,这些调整能让后续的模型运行…...
如何在3天内快速掌握音频驱动面部动画技术?完整实战指南 [特殊字符]
如何在3天内快速掌握音频驱动面部动画技术?完整实战指南 🚀 【免费下载链接】FACEGOOD-Audio2Face http://www.facegood.cc 项目地址: https://gitcode.com/gh_mirrors/fa/FACEGOOD-Audio2Face 想要让虚拟角色拥有逼真的面部表情吗?FA…...
MLCC陶瓷电容选型避坑指南:从X7R到C0G,5个关键参数决定电路稳定性
MLCC陶瓷电容选型避坑指南:从X7R到C0G,5个关键参数决定电路稳定性 当你在设计一个精密电源模块时,突然发现输出电压在高温环境下出现异常波动;或者调试射频电路时,明明计算无误的滤波网络却始终达不到预期效果——这些…...
金蝶K3生产任务单状态查询SQL全解析:从计划到结案
1. 金蝶K3生产任务单状态查询SQL入门指南 第一次接触金蝶K3的生产任务单查询时,我也被那些复杂的SQL语句搞得头晕眼花。后来才发现,只要理解了系统设计逻辑,这些查询其实就像查快递单号一样简单。生产任务单在系统中会经历计划、确认、下达、…...
智能处理与开源工具:突破传统背景抠图限制的实时解决方案
智能处理与开源工具:突破传统背景抠图限制的实时解决方案 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https…...
终极小说下载器:一键保存全网小说,打造你的私人数字图书馆
终极小说下载器:一键保存全网小说,打造你的私人数字图书馆 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否遇到过这样的情况:追更的小说突然…...
STM32 PWR电源管理与低功耗模式实战指南
1. STM32电源管理基础与实战意义 在嵌入式系统开发中,电源管理往往是最容易被忽视却至关重要的环节。想象一下你的智能手环如果每天都需要充电,或者无线传感器节点每隔几小时就要更换电池,这样的产品显然缺乏实用价值。STM32的PWR模块正是为解…...
一站式融合赋能,企业级私有化视频会议系统EasyDSS助力企业培训全流程闭环管理
传统企业培训往往面临诸多痛点,线下培训受地域、时间限制,直播培训错过即无,核心内容无法有效沉淀,会议、直播、点播多平台切换,操作繁琐效率低,EasyDSS企业级私有化视频会议系统,打破单一功能局…...
VxLAN网络如何“破圈”?聊聊Type5路由在云网融合中的真实应用场景
VxLAN Type5路由:云网融合时代的智能连接引擎 在数字化转型浪潮中,企业网络架构正经历着从传统三层架构向云原生网络的跃迁。VxLAN作为新一代网络虚拟化技术的代表,其Type5路由功能正在成为打通云网边界的关键推手。想象一下这样的场景&#…...
