Spring学习笔记(5)----依赖注入的简单实现

Spring的核心机制是依赖注入。依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。

下面通过简单的实例演示依赖注入。

项目中主要包含一下一个文件:

 

UserDAO是一个接口,包含了一个方法:

package com.szy.spring.dao;

public interface UserDAO
{
	void show();
}

 

而UserDAO4MySqlImpl和UserDAO4OracleImpl实现了UserDAO中的方法。

package com.szy.spring.dao;
public class UserDAO4MySqlImpl implements UserDAO
{
	public void show()
	{
		System.out.println("MySqlDAO Implement");
	}
}

 

package com.szy.spring.dao;
public class UserDAO4OracleImpl implements UserDAO
{
	public void show()
	{
		System.out.println("OracleDAO Implement");
	}
}

 

UserService是另外一个包中的接口,

package com.szy.spring.service;

public interface UserService
{
	void show();
}

 

UserServiceImpl实现了这个接口,

package com.szy.spring.service;

import com.szy.spring.dao.UserDAO;

public class UserServiceImpl implements UserService
{
	private UserDAO userDAO;
	
	public void show()
	{
		userDAO.show();
	}

	public UserDAO getUserDAO()
	{
		return userDAO;
	}
	public void setUserDAO(UserDAO userDAO)
	{
		this.userDAO = userDAO;
	}
}

 但是在实现这个接口中,调用了UserDAO中的方法。一般情况下我们需要在这里实例化一个UserDAO对象,比如

UserDAO userDAO=new UserDAO4MySqlImpl();

 这样的话耦合度就比较高,通过spring我们可以降低耦合度。

在Sping的配置文件中,我们需要这样配置

<?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:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<bean id="mySqlDAO" class="com.szy.spring.dao.UserDAO4MySqlImpl"/>
	<bean id="oracleDAO" class="com.szy.spring.dao.UserDAO4OracleImpl"/>
	<bean id="userService" class="com.szy.spring.service.UserServiceImpl">
		<!--构造方法注入  
			<property name="userDAO" ref="mySqlDAO"></property>
		-->
		<property name="userDAO" ref="oracleDAO"></property>
	</bean>
</beans>

 

下面我们测试

ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");   
		UserService service=(UserService)ctx.getBean("userService");
		service.show();

 

输入内容为

OracleDAO Implement

 如果我们想实用Mysql数据库呢? 

此时我们只要修改配置文件即可,而不需要修改Java文件。

<property name="userDAO" ref="mySqlDAO"></property>

 

Nacos启动报错No DataSource set?5分钟搞定standalone模式配置 本文针对Nacos启动时常见的“No DataSource set”报错,深入解析了其根源在于默认集群模式与外部数据库依赖。提供了两种快速解决方案:通过命令行参数“-m standalone”启动,或直接修改启动脚本配置文件,从而在5分钟内以单机模式成功启动Nacos,无需配置MySQL数据库。 阅读详情

相关推荐

4G+GNSS定位模块DX-CT511N-B:AT指令实战与多协议通信指南

本文详细介绍了4G+GNSS定位模块DX-CT511N-B的AT指令实战应用与多协议通信配置。内容涵盖TCP/UDP通信、MQTT协议集成、HTTP服务交互以及GNSS定位功能的深度解析,为开发者提供从基础指令到高级调试的完整指南,助力物联网设备开发。

hope8的博客 289

狂神spring5

1、介绍 轻量级 控制反转 面向切面编程的框架 支持事务处理 对框架整合的支持。 2、扩展 springboot 快速开发脚手架 快速开发单个微服务 需要完全掌握springmvc和spring ## 3、ioc理论 19 导包 直接导入一个 传统做法 dao UserDaoImpl getUser UserService UserServiceImpl 每次都需要修改这里的数据 组合 private UserDao userDao=new UserDaoImpl(); public voi

qq_42938698的博客 545

Verilog仿真时读取bin文件模拟输入数据流,将输出数据流写入bin文件

需要关注的是,一般会省略文件起始地址和读取长度,那么mem为多大,就会从文件中读取多大的数据出来填充mem。如果只需要读取一次文件,那么代码到此就结束了,但是如果还需要每一帧都读取该文件转换为数据流,则在循环里判断新的一帧信号是否到来,在新的一帧再次打开一次文件,从头开始读取数据。

qq_41137205的博客 2772

注入属性的三种方式及其比较

第一种方式是采用Bean的构造器,要求Bean的构造方法中要有属性的相应的参数 public class UserManagerImpl implements UserManager { private UserDao userDao; public UserManager

yjsuge的专栏 1125

Fluent DPM模型保姆级教程:三通管颗粒流动模拟,从网格导入到轨迹图生成

本文提供Fluent DPM模型在三通管颗粒流动模拟中的保姆级教程,涵盖从网格导入到轨迹图生成的全流程。通过详细步骤和参数设置,帮助用户掌握DPM模型在颗粒流动模拟中的关键技巧,适用于化工、能源等领域的工程应用。

weixin_30615767的博客 579

【RT-DETR实战】RT-DETR实战手记(200):端侧实时目标检测,下一步往哪儿走?

昨天深夜调一个模型部署,在树莓派4B上跑RT-DETR-nano,帧率死活卡在8FPS上不去。量化也做了,算子也优化了,内存对齐也检查了,可就是离实时检测的底线还差一截。盯着终端里跳动的数字,突然意识到——我们可能正在接近当前技术路径的瓶颈。端侧实时目标检测的下一个突破口,恐怕不在现有框架的修修补补里。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 186

面试解答系列:什么是Spring的依赖注入?哪些方法进行依赖注入?

Spring 能有效地组织J2EE应用各层的对象。不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的 管理下有机地协调、运行。Spring将各层的对象以松耦合的方式组织在一起,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用完全面向接口。当系统需要重构时,代码的改写量将大...

AD_plus的博客 4952

coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?

🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 2669

Spring面试底层原理的那些问题,你是不是真的懂Spring?

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34348111的博客 169

基于CNN的三相故障识别算法及实现(Matlab)

通过预处理数据、构建CNN模型、训练与评估模型等步骤,我们可以准确快速地识别三相故障。现代电力系统中,三相故障是一种常见的故障情况,可以导致电网中断、设备损坏甚至火灾等严重后果。本文将介绍基于卷积神经网络(CNN)的三相故障识别算法,并提供Matlab源代码实现。首先,将原始信号分为训练集和测试集。然后,对输入信号进行归一化处理,确保数据在合适的范围内。CNN适用于处理二维数据,所以我们可以将输入信号看作是时间序列数据和特征(如电压、电流等)的二维矩阵。在开始之前,我们需要一个包含正常和故障样本的数据集。

学习使你进步。 384

DeepSeek赋能公文写作:从高效成文到精准传情的全维度指南

摘要:AI赋能公文写作的精准化实践 公文写作长期面临框架混乱、素材匮乏、表达不规范、修改低效等痛点。DeepSeek等AI工具通过"精准指令+分步赋能"模式实现突破:首先明确公文的目的性、逻辑性和规范性特征;其次采用包含场景、类型、目的等要素的指令模板;再分四步实施:框架搭建确保层次分明,内容填充解决素材问题,表达优化适配不同语体,合规校验把关格式规范。典型案例显示,AI能将数据罗列转化为"数据+成果+价值"的生动表述,使公文既规范又具感染力。这种AI赋能的写作方法显

通俗易懂学IT 233

spring mysql注入_Spring学习笔记(5)----依赖注入的简单实现

Spring的核心机制是依赖注入。依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用...

weixin_42462007的博客 217

【笔记】1.1 拉伸力-伸长(延伸)曲线和应力-应变曲线

过了B点后,由于颈缩导致的截面半径迅速减小,导致真应力迅速上升,切线斜率明显提高。假设试样原长为ε,在力的作用下伸长了dε,那么根据应变的定义,瞬时的应变为dε/ε,总的应变为瞬时应变的累计,假设在瞬时的条件下,试样受载荷变化量为 ΔF ,变化的截面积为 ΔA ,而且ΔA→0,那么瞬时的。由于原始的截面积和原始的标距长度为常数,故得到的曲线长相和拉伸力-伸长(延伸)曲线没啥区别。因为用的都是原始的截面积和原始的标距长度,故称为公称应力和公称应变。如果拉伸力→应力,伸长长度→应变,就会得到应力-应变曲线。

m0_73676887的博客 5271

《孙哥说Spring5》学习笔记

这个课比以前看过的Spring5要透彻很多:孙哥说Spring5 工厂设计模式、第一个Spring程序细节分析、整合日志框架 注入详解 — Set注入(JDK内置类型,用户自定义类型)、构造注入(重载) 工厂设计模式、第一个Spring程序细节分析、整合日志框架 对象的生命周期、配置文件参数化、自定义类型转换器、后置处理Bean 每天只能晚上抽空看1个多小时,缓慢学习… ...

萌宅鹿的技术小屋 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring5学习笔记—整合MyBatis

在我们之前的系列文章中,我们已经深入探讨了Spring5IOC和AOP,它们是Spring框架的基石。下面我们接着讨论开始讨论Spring5对于持久层框架MyBatis的整合,让我们一起开启新的的篇章吧。以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

分享思想,留下痕迹。 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

spring依赖注入简单实现

基于依赖注入实现原理的简单实现spring @Autowired底层实现原理注解@Autowired注入简单实现demo spring @Autowired底层实现原理 spring 的ioc实例化是通过beanFactory+反射 实现的,下面的demo是一个简单实现,并不全面,但有助于读者对源码的阅读 注入注解Autowired和Resource 的区别 spring的 @Autowired 是先按照类型匹配,找不到就按照名称匹配 而@Resource是基于jdk的使用范围不局限于spring,跟

小浪与艳花 291

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring学习笔记 依赖注入

依赖注入简介依赖注入是一个很常用的词。Java新手常会写出如下的代码,直接在写一个类的时候让它自己初始化自己。但是这不是一个好办法。一个类的状态应该由创建它的类决定,不能由自己决定自己。因此更好的办法是交给构造方法来初始化。public class User { private long id; private String username; private String

乐百川 3075

Spring依赖注入

Spring入门

2302_80077862的博客 868

Spring 使用注解实现依赖注入

Spring 使用注解实现依赖注入 依赖注入:本质就是对类中的变量进行赋值操作! spring 使用注解标注类,spring容器通过包扫描注解,将这些标注了spring注解的类管理起来。 1、@service注解: ​ 标注在一个service层的业务类上,告诉spring容器这是一个service层业务类,spring就会自动创建这个类的实例,在你需要这个对象的地方将它注入。 ​ 标注了这个注解的类在spring容器中生成的对象的id默认是首字母小写的类名,也可以由自己指定@service("name

qq_41995896的博客 4967

Spring源码之依赖注入

依赖注入(Dependency Injection,简称DI)是控制反转(Inversion of Control,简称IoC)一种具体实现技术,作为Spring核心功能,解耦了对象的创建与使用,即我们可以不用显示的创建对象的依赖,而是通过外部容器在运行时完成对象的注入。注入点为@Autowired、@Resource、@Inject、@Value注解标记的属性、方法,通过反射的方式进行值注入。

qq_26783889的博客 1019

Spring5参考指南:依赖注入

文章目录依赖注入依赖注入的配置详解depends-onlazy-init自动装载方法注入 依赖注入 依赖注入就是在Spring创建Bean的时候,去实例化该Bean构造函数所需的参数,或者通过Setter方法去设置该Bean的属性。 Spring的依赖注入有两种基于构造函数的依赖注入和基于setter的依赖注入。 基于构造函数的依赖注入 构造函数的注入是通过构造函数的参数来实现的。如下所示: pu...

程序那些事 6555

Spring入门——依赖注入的实现方式

这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。你的支持,我的动力;祝各位前程似锦,offer不断!!!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!你的支持,我的动力;祝各位前程似锦,offer不断!!!

H1767410的博客 1015

spring依赖注入

1、使用bean标签注入 1、pom.xml文件配置 在maven项目中的pom.xml文件中配置spring依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.6.RELEASE</version&..

PnJgHT的博客 4375

《Spring技术内幕》学习笔记5——IoC容器的依赖注入

1.当Spring IoC容器完成了Bean定义资源的定位、载入和解析注册以后,IoC容器中已经管理类Bean定义的相关数据,但是此时IoC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况发生: (1).用户第一次通过getBean方法向IoC容索要Bean时,IoC容器触发依赖注入。 (2).当用户在Bean定义资源中为元素配置了lazy-init属性,即让容器在解析注册Be

Tony Chen的专栏 1万+

手写Spring源码——实现一个简单的spring framework

***//*** bean的类型*//*** bean的作用域*//*** 是否懒加载*/在AnnotationConfigApplicationContext中定义一个list保存所有BeanPostProcessor接口。/*** 保存所有BeanPostProcessor接口实现类的集合*/

沐雨橙风ιε的博客 2581
上一篇: Spring学习笔记(4)----Bean节点信息配置
下一篇: 在91job上申请招聘会门票的步骤
coolszy
博客等级 码龄19年 2659粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值