Spring IOC控制反转、DI注入以及配置
1.使用xml的方式进行配置IOC容器,首先引入依赖
在Resource资源下配置,applicationContext.xml ,刷新mevan后可以直接选择配置spring.xml文件
<!-- spring核心用来管理bean --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency>
applicationContext.xml
配置bean:
id:实现标识给bean起名字
class属性标识给这个bean对象定义类型
name:属性是可以给当前bean起别名(使用“ ”,“,”,“;”分隔开来)
singleton:单例(默认)
prototype:非单例
<?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="bookDAO" class="org.itheima.dao.impl.BookDAOImpl"/><bean id="bookService" class="org.itheima.service.impl.BookServiceImpl"/>
</beans>
现在配置DAO层:
public interface BookDAO {public void book();
}
public class BookDAOImpl implements BookDAO {@Overridepublic void book() {System.out.println("BookDAO……");}
}
Service层:
public interface BookService {public void write();
}
public class BookServiceImpl implements BookService {private BookDAO bookDAO = new BookDAOImpl();@Overridepublic void write() {System.out.println("BookService……");}
}
测试文件1:
public class BookDAOTest {@Testpublic void book() {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");BookDAO bookDAO = (BookDAO) ctx.getBean("bookDAO");bookDAO.book();}
}
打印结果:
测试文件2:
public class BookServiceTest {@Testpublic void write() {ClassPathXmlApplicationContext txc = new ClassPathXmlApplicationContext("applicationContext.xml");BookService bookService = (BookService) txc.getBean("bookService");bookService.write();}
}
打印结果:
依赖 new ClassPathXmlApplicationContext("applicationContext.xml")的方式不太合适,同样是创建对象的形式,那不如直接new一个实体DAO,因此此方法需要改进!!
2.使用dao与Service的关系
与以上不同的是BookServiceImpl与测试类不同:
public class BookServiceImpl implements BookService {
private BookDAO bookDAO = new BookDAOImpl();@Overridepublic void write() {bookDAO.book();System.out.println("BookService……");}
}
测试类:
public class BookServiceImplTest {@Testpublic void testWrite() {ClassPathXmlApplicationContext cax = new ClassPathXmlApplicationContext("applicationContext.xml");BookService bookService = (BookService) cax.getBean("bookService");bookService.write();}
}
测试结果:
3.使用DI注入 bean实例,并且使用service 调用dao层方法
首先配置Service的依赖关系properties
properties:配置当前bean的属性
name属性标识配置哪一个具体的属性
ref属性表示参照哪个bean对象
<?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="bookDAO" class="org.itheima.dao.impl.BookDAOImpl"/><bean id="bookService" class="org.itheima.service.impl.BookServiceImpl"><property name="bookDAO" ref="bookDAO"/></bean>
</beans>
dao层:
public interface BookDAO {public void book();
}
public class BookDAOImpl implements BookDAO {@Overridepublic void book() {System.out.println("BookDAO……");}
}
service层:
public interface BookService {public void write();
}
通过容器将bookDAO对象传入进去
public class BookServiceImpl implements BookService {private BookDAO bookDAO;@Overridepublic void write() {bookDAO.book();System.out.println("BookService……");}public void setBookDAO(BookDAO bookDAO) {this.bookDAO = bookDAO;}
}
测试类:
public class BookServiceImplTest {
private BookService bookService;@Testpublic void write() {ClassPathXmlApplicationContext cax = new ClassPathXmlApplicationContext("applicationContext.xml");BookService bookService = (BookService) cax.getBean("bookService");bookService.write();}
}
测试结果:
相关文章:
Spring IOC控制反转、DI注入以及配置
1.使用xml的方式进行配置IOC容器,首先引入依赖 在Resource资源下配置,applicationContext.xml ,刷新mevan后可以直接选择配置spring.xml文件 <!-- spring核心用来管理bean --><dependency><groupId>org.springframework</g…...
RabbitMQ的部分模式
1发布订阅模式 发送者 package org.example; import com.alibaba.fastjson.JSON; import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import ja…...
提取单选框的值,并通过ajax传值到后台
<!DOCTYPE html> <html lang"zh" xmlns:th"http://www.thymeleaf.org" xmlns:shiro"http://www.pollix.at/thymeleaf/shiro"> <head><th:block th:include"include :: header(日库存更新提示)" /> </head&…...
Django创建多app应用
目录 1. 引言 2. 多app创建的两种方式 2.1 多个app结构 2.2 单个apps多个app 3. 最后 1. 引言 在平常业务开发中,我们遇到的功能可能会有很多,单个app的应用可能无法满足我们 这个时候,我们就需要多app应用,例如:…...
如何反反爬虫
我们来讲最常见的反反爬虫方法 import requests r requests.get(网页网址) print(r.requests.headers) 一.使用简单的方法把请求头改为真的浏览器模式 import requests link网页地址 heraders{User-Agent:} rrequests.get(link,headersheaders) print(r.requsts.headers)我们…...
wireshark抓包之DNS协议
DNS协议 DNS协议的主要作用是将域名解析为对应的IP地址。当我们在浏览器中输入一个网址时,计算机需要通过DNS协议来查找该网址对应的IP地址,以便能够建立连接并访问目标资源。 DNS协议的工作流程大致如下: 用户的计算机或设备(充…...
升级到 Java 21 是值得的
升级到 Java 21 是值得的 又到了一年中的这个时候——New Relic 的年度“State of the Java Ecosystem”调查结果出来了,我一如既往地深入研究了它。虽然我认为该报告做得很好并且提出了很好的问题,但我对有多少 Java 开发人员正在使用低版本感到沮丧。…...
C# 多线程
文章目录 C# 多线程进程与线程无参数的子线程带参数的子线程运行结果 销毁线程 Abort()运行结果 ThreadPool和Task运行结果 异步与同步运行结果 lock单线程运行结果 多线程运行结果 使用lock运行结果 C# 多线程 进程与线程 进程:进程就是一个应用程序,…...
快速安装sudachipy日语包
1、前往 https://rustup.rs 下载并安装 Rustup Linux系统可直接运行以下命令 Window系统需要去网站下载exe包 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh2、安装 Rust 编译器 rustup install stable3、设置默认版本 rustup default stable4、重新安装 …...
蓝桥杯刷题day13——乘飞机【算法赛】
一、问题描述 等待登机的你看着眼前有老有小长长的队伍十分无聊,你突然想要知道,是否存在两个年龄相仿的乘客。每个乘客的年龄用一个 0 到 36500 的整数表示,两个乘客的年龄相差 365 以内就认为是相仿的。 具体来说,你有一个长度…...
大模型量化技术-BitsAndBytes
Transformers 量化技术 BitsAndBytes bitsandbytes是将模型量化为8位和4位的最简单选择。 8位量化将fp16中的异常值与int8中的非异常值相乘,将非异常值转换回fp16,然后将它们相加以返回fp16中的权重。这减少了异常值对模型性能产生的降级效果。4位量化进一步压缩了模型,并且…...
EasyExcel 复杂表头的导出(动态表头和静态表头)
问题:如图,1部分的表头是动态的根据日期变化,2部分是数据库对应的字段,静态不变的; 解决方案:如果不看1的部分,2部分内容可以根据实体类注解的方式导出,那么我们是不是可以先将动态表…...
centos7 fatal error: curl/curl.h: No such file or directory
若编译遇到此问题,可以查看环境是否libcurl库 yum list installed | grep libcurl 发现未安装libcurl库 执行libcurl库的安装命令: 1.对于Debian/Ubuntu系统: sudo apt-get install libcurl4-openssl-dev 2.对于RHEL/CentOS系统…...
【Linux】自定义协议+序列化+反序列化
自定义协议序列化反序列化 1.再谈 "协议"2.Cal TCP服务端2.Cal TCP客户端4.Json 喜欢的点赞,收藏,关注一下把! 1.再谈 “协议” 协议是一种 “约定”。在前面我们说过父亲和儿子约定打电话的例子,不过这是感性的认识&a…...
常见故障排查和优化
一、MySQL单实例故障排查 故障现象 1 ERROR 2002 (HY000): Cant connect to local MySQL server through socket /data/mysql/mysql.sock (2) 问题分析:以上情况一般都是数据库未启动或者数据库端口被防火墙拦截导致。 解决方法:启动数据库或者防火墙…...
选择华为HCIE培训机构有哪些注意事项
选择软件培训机构注意四点事项1、口碑:学员和社会人士对该机构的评价怎样? 口碑对于一个机构是十分重要的,这也是考量一个机构好不好的重要标准,包括社会评价和学员的评价和感言。誉天作为华为首批授权培训中心,一直致…...
python怎么处理txt
导入文件处理模块 import os 检测路径是否存在,存在则返回True,不存在则返回False os.path.exists("demo.txt") 如果你要创建一个文件并要写入内容 #如果demo.txt文件存在则会覆盖,并且demo.txt文件里面的内容被清空,如…...
SAMRTFORMS 转换PDF 发送邮件
最终成果: *&---------------------------------------------------------------------**& Report ZLC_FIND_EXIT*&---------------------------------------------------------------------**&根据T-CODE / 程序名查询出口、BADI增强*&-------…...
探讨在大数据体系中API的通信机制与工作原理
** 引言 关联阅读博客文章:深入解析大数据体系中的ETL工作原理及常见组件 关联阅读博客文章:深入理解HDFS工作原理:大数据存储和容错性机制解析 ** 在当今数字化时代,数据已经成为企业发展和决策的核心。随着数据规模的不断增长…...
算法打卡day23
今日任务: 1)39. 组合总和 2)40.组合总和II 3)131.分割回文串 39. 组合总和 题目链接:39. 组合总和 - 力扣(LeetCode) 给定一个无重复元素的数组 candidates 和一个目标数 target ,…...
每天五分钟深度学习:神经网络和深度学习有什么样的关系?
本文重点 神经网络是一种模拟人脑神经元连接方式的计算模型,通过大量神经元之间的连接和权重调整,实现对输入数据的处理和分析。而深度学习则是神经网络的一种特殊形式,它通过构建深层次的神经网络结构,实现对复杂数据的深度学习…...
基于PSO优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络(CNN)在时间序列中的应用 4.2 长短时记忆网络(LSTM)处理序列依赖关系 4.3 注意力机制(Attention) 5…...
物联网监控可视化是什么?部署物联网监控可视化大屏有什么作用?
随着物联网技术的深入应用,物联网监控可视化成为了企业数字化转型的关键环节。物联网监控可视化大屏作为物联网监控平台的重要组成部分,能够实时展示物联网设备的运行状态和数据,为企业管理决策和运维监控提供了有力的支持。今天,…...
设计一个Rust线程安全栈结构 Stack<T>
在Rust中,设计一个线程安全的栈结构Stack<T>,类似于Channel<T>,但使用栈的FILO(First-In-Last-Out)原则来在线程间传送数据,可以通过使用标准库中的同步原语如Mutex和Condvar来实现。下面是一个…...
Docker Desktop 在 Windows 上的安装和使用
目录 1、安装 Docker Desktop 2、使用 Docker Desktop (1)运行容器 (2)查看容器信息 (3)数据挂载 Docker Desktop是Docker的官方桌面版,专为Mac和Windows用户设计,提供了一个简…...
2024年最受欢迎的 19 个 VS Code 主题排行榜
博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …...
突破编程_C++_网络编程(OSI 七层模型(物理层与数据链路层))
1 OSI 七层模型概述 OSI(Open Systems Interconnection)七层模型,即开放系统互联参考模型,起源于 20 世纪 70 年代和 80 年代。随着计算机网络技术的快速发展和普及,不同厂商生产的计算机和网络设备之间的互操作性成为…...
Spring boot如何使用redis缓存
引入依赖 这个是参照若依的,如果没有统一的版本规定的话,这里是需要写版本号的 <!-- redis 缓存操作 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</arti…...
红蓝色WordPress外贸建站模板
红蓝色WordPress外贸建站模板 https://www.mymoban.com/wordpress/5.html...
python爬虫----了解爬虫(十一天)
🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…...
宁夏电力建设工程公司外部网站/青岛seo排名收费
[ 中关村在线 原创 ] 有很多的朋友们在问我:“交换机和路由器到底有什么区别”,其实这个不是什么很难理解的事情,这两个设备的区别主要在功能上区别大了些,那么我们最好先了解一下什么是交换机和什么是路由器的最基本的常识。现在…...
免费模板网站都有什么/搜索引擎优化百度百科
如何应对用户使用无痕浏览模式在开发过程中,由于一些页面会使用localStorage,sessionStorage ,在无痕浏览模式,本地存储不能用,会出现很多问题,看到过一种解决方案function isStorageSupported() {let testKey test,s…...
360做网站吗/seo公司培训课程
人偶工具 Puppet Tools根据控点(也称“操控点” Pin)位置,对图像的不同部位进行拉伸、挤压、伸展及其它变形处理,类似于 Ps 中的“操控变形”命令。快捷键:Ctrl P人偶工具组中有五个工具,每种工具对应一种…...
动漫网站源码免费/成都seo网络优化公司
电竞键盘是指专门用于电子竞技的键盘,相比较于普通键盘,电竞键盘不仅要支持复杂的灯效,还有对高性能,高响应速度的要求。 复杂的灯效是吸引玩家购买键盘的卖点,能够快速稳定响应玩家按键动作,做出各种灯效…...
和先锋影音和做的网站/青岛seo服务
dubbo provider抛出一个自定义异常,consuemer获取失败dubbo 源码有一个统一的异常处理策略public Result invoke(Invoker> invoker, Invocation invocation) throws RpcException {try {Result result invoker.invoke(invocation);if (result.hasException() &a…...
网站工信部备案流程/网站优化排名公司
我是LBJ:作为一名金融数据生产线的民工,我是如何拿到了电商行业的offer?首先,整个过程需要有主观能动性,也就是需要自己感兴趣,主动是第一前提。最开始我是被Python吸引到的,当时隐隐有点往程序…...