当前位置: 首页 > news >正文

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容器&#xff0c;首先引入依赖 在Resource资源下配置&#xff0c;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. 引言 在平常业务开发中&#xff0c;我们遇到的功能可能会有很多&#xff0c;单个app的应用可能无法满足我们 这个时候&#xff0c;我们就需要多app应用&#xff0c;例如&#xff1a…...

如何反反爬虫

我们来讲最常见的反反爬虫方法 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地址。当我们在浏览器中输入一个网址时&#xff0c;计算机需要通过DNS协议来查找该网址对应的IP地址&#xff0c;以便能够建立连接并访问目标资源。 DNS协议的工作流程大致如下&#xff1a; 用户的计算机或设备&#xff08;充…...

升级到 Java 21 是值得的

升级到 Java 21 是值得的 又到了一年中的这个时候——New Relic 的年度“State of the Java Ecosystem”调查结果出来了&#xff0c;我一如既往地深入研究了它。虽然我认为该报告做得很好并且提出了很好的问题&#xff0c;但我对有多少 Java 开发人员正在使用低版本感到沮丧。…...

C# 多线程

文章目录 C# 多线程进程与线程无参数的子线程带参数的子线程运行结果 销毁线程 Abort()运行结果 ThreadPool和Task运行结果 异步与同步运行结果 lock单线程运行结果 多线程运行结果 使用lock运行结果 C# 多线程 进程与线程 进程&#xff1a;进程就是一个应用程序&#xff0c;…...

快速安装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——乘飞机【算法赛】

一、问题描述 等待登机的你看着眼前有老有小长长的队伍十分无聊&#xff0c;你突然想要知道&#xff0c;是否存在两个年龄相仿的乘客。每个乘客的年龄用一个 0 到 36500 的整数表示&#xff0c;两个乘客的年龄相差 365 以内就认为是相仿的。 具体来说&#xff0c;你有一个长度…...

大模型量化技术-BitsAndBytes

Transformers 量化技术 BitsAndBytes bitsandbytes是将模型量化为8位和4位的最简单选择。 8位量化将fp16中的异常值与int8中的非异常值相乘,将非异常值转换回fp16,然后将它们相加以返回fp16中的权重。这减少了异常值对模型性能产生的降级效果。4位量化进一步压缩了模型,并且…...

EasyExcel 复杂表头的导出(动态表头和静态表头)

问题&#xff1a;如图&#xff0c;1部分的表头是动态的根据日期变化&#xff0c;2部分是数据库对应的字段&#xff0c;静态不变的&#xff1b; 解决方案&#xff1a;如果不看1的部分&#xff0c;2部分内容可以根据实体类注解的方式导出&#xff0c;那么我们是不是可以先将动态表…...

centos7 fatal error: curl/curl.h: No such file or directory

若编译遇到此问题&#xff0c;可以查看环境是否libcurl库 yum list installed | grep libcurl 发现未安装libcurl库 执行libcurl库的安装命令&#xff1a; 1.对于Debian/Ubuntu系统&#xff1a; sudo apt-get install libcurl4-openssl-dev 2.对于RHEL/CentOS系统&#xf…...

【Linux】自定义协议+序列化+反序列化

自定义协议序列化反序列化 1.再谈 "协议"2.Cal TCP服务端2.Cal TCP客户端4.Json 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 1.再谈 “协议” 协议是一种 “约定”。在前面我们说过父亲和儿子约定打电话的例子&#xff0c;不过这是感性的认识&a…...

常见故障排查和优化

一、MySQL单实例故障排查 故障现象 1 ERROR 2002 (HY000): Cant connect to local MySQL server through socket /data/mysql/mysql.sock (2) 问题分析&#xff1a;以上情况一般都是数据库未启动或者数据库端口被防火墙拦截导致。 解决方法&#xff1a;启动数据库或者防火墙…...

选择华为HCIE培训机构有哪些注意事项

选择软件培训机构注意四点事项1、口碑&#xff1a;学员和社会人士对该机构的评价怎样&#xff1f; 口碑对于一个机构是十分重要的&#xff0c;这也是考量一个机构好不好的重要标准&#xff0c;包括社会评价和学员的评价和感言。誉天作为华为首批授权培训中心&#xff0c;一直致…...

python怎么处理txt

导入文件处理模块 import os 检测路径是否存在&#xff0c;存在则返回True&#xff0c;不存在则返回False os.path.exists("demo.txt") 如果你要创建一个文件并要写入内容 #如果demo.txt文件存在则会覆盖&#xff0c;并且demo.txt文件里面的内容被清空&#xff0c;如…...

SAMRTFORMS 转换PDF 发送邮件

最终成果&#xff1a; *&---------------------------------------------------------------------**& Report ZLC_FIND_EXIT*&---------------------------------------------------------------------**&根据T-CODE / 程序名查询出口、BADI增强*&-------…...

探讨在大数据体系中API的通信机制与工作原理

** 引言 关联阅读博客文章&#xff1a;深入解析大数据体系中的ETL工作原理及常见组件 关联阅读博客文章&#xff1a;深入理解HDFS工作原理&#xff1a;大数据存储和容错性机制解析 ** 在当今数字化时代&#xff0c;数据已经成为企业发展和决策的核心。随着数据规模的不断增长…...

算法打卡day23

今日任务&#xff1a; 1&#xff09;39. 组合总和 2&#xff09;40.组合总和II 3&#xff09;131.分割回文串 39. 组合总和 题目链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;…...

别再手动描边了!用AutoCAD 2022画好异形PCB板框,一键导入Cadence SPB17.4

高效绘制异形PCB板框&#xff1a;AutoCAD与Cadence的无缝协作指南 在硬件设计领域&#xff0c;异形PCB板框的绘制一直是工程师们面临的挑战。传统矩形板框的绘制相对简单&#xff0c;但当项目需求涉及圆弧、缺口或不规则轮廓时&#xff0c;直接在Cadence Allegro中操作往往效率…...

物联网超低功耗设计:从睡眠优先到能量自治的十年续航之道

1. 项目概述&#xff1a;让物联网节点运行数十年的设计哲学如果你正在部署一个大规模的物联网网络&#xff0c;无论是智慧城市的数千个路灯传感器&#xff0c;还是遍布数公里农田的环境监测节点&#xff0c;最让你头疼的问题恐怕不是通信协议&#xff0c;也不是数据处理&#x…...

终极模组加载器指南:如何在5分钟内安全扩展《杀戮尖塔》游戏内容

终极模组加载器指南&#xff1a;如何在5分钟内安全扩展《杀戮尖塔》游戏内容 【免费下载链接】ModTheSpire External mod loader for Slay The Spire 项目地址: https://gitcode.com/gh_mirrors/mo/ModTheSpire ModTheSpire是一款专为《杀戮尖塔》设计的开源模组加载器&…...

终极音乐解锁指南:让加密音频在浏览器中重获自由

终极音乐解锁指南&#xff1a;让加密音频在浏览器中重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…...

5分钟快速上手:roop-unleashed AI换脸神器完全指南

5分钟快速上手&#xff1a;roop-unleashed AI换脸神器完全指南 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 想要在几分钟内制作专业级AI换脸视频吗&…...

Gemini3.1Pro解决新媒体小编选题难痛点

做新媒体的小编&#xff0c;最怕的不是写&#xff0c;而是“今天写什么”。 选题总是来得很急&#xff0c;热点总是变化很快&#xff0c;账号又要求持续更新&#xff0c;结果就是&#xff1a;内容压力大、时间不够用、框架搭不出来。如果你每天都在追热点、找角度、写标题、搭结…...

数字遗产:我们写的代码,在死后将归于何处?

一行注释里的永恒追问测试工程师的日常&#xff0c;往往是从一行日志或一个断言开始的。但你是否注意过&#xff0c;在那些被反复修改的代码文件最顶端&#xff0c;常常躺着一行注释&#xff1a;“Author: [某位早已离职的同事]”。这行注释像一座小小的墓碑&#xff0c;标记着…...

如何用3分钟搞定视频字幕提取?揭秘这款本地化硬字幕提取神器

如何用3分钟搞定视频字幕提取&#xff1f;揭秘这款本地化硬字幕提取神器 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字…...

别再复制粘贴了!手把手教你为51单片机LCD12864制作自定义中文字库(Keil C51环境)

从零构建51单片机LCD12864自定义中文字库的完整实战指南 在嵌入式显示领域&#xff0c;标准字库往往无法满足个性化需求。当我们需要在LCD12864屏幕上显示特殊符号、品牌LOGO或艺术字体时&#xff0c;自定义字库技术就成为关键突破点。本文将彻底解析从字模提取到ROM优化的全流…...

【仅限首批内测团队获取】AI Agent Serverless标准化交付套件(含Terraform模块+OpenTelemetry追踪模板+合规审计清单)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent Serverless应用的演进逻辑与范式跃迁 AI Agent 与 Serverless 的融合并非技术堆叠&#xff0c;而是计算范式在智能体自治性、事件驱动粒度和资源契约关系三重维度上的结构性重构。早期云函数仅…...