基于Spring IOC容器实现工具类静态方法调用的三种方式

手写SpringIOC容器框架------@Service和@Resource实现 微信公众号:用心程序员 简介 Spring框架 作为一个轻量级的开源框架不仅给我们的开发工作带来了许多便利,同时也为众多开源框架的研究提供了不可或缺的指导思想。Spring最为核心的两大功能特性就是IOC和AOP.下面主要介绍SpringIOC及自己实现SpringIOC 一、SpringIOC SpringIOC 指的是控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转... 阅读详情

背景说明
在spring MVC 的项目中定义配置读取工具类时,发现需要使用Spring IOC容器进行注入,原始方法就是直接使用@Autowired 将依赖类注入到工具类中,想要用工具类时也得需要借助@Autowired进行注入,操作起来太复杂,完全丧失了工具类的灵活性。

下面整理了将Spring IOS容器中的对象注入到工具类静态方法中的三种实现方式,详细方式如下所示:
1、基于@PostConstruct 实现代码,详细代码如下所示:

//服务
import org.springframework.stereotype.Service;
@Service
public class ConfigService {
    public String get(String key){
        return "OK";
    }
}

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ConfigUtil {
    private static ConfigService configService;
    //IOC注入
    @Autowired
    @Qualifier("configService")
    ConfigService iocConfigService;
    //初始化赋值
    @PostConstruct
    public void init() {
        this.configService = iocConfigService;
    }
    //静态方法
    public static String  get(String key){
        return configService.get(key);
    }
}  

2、基于set方法实现代码,详细代码如下所示:

//配置服务
import org.springframework.stereotype.Service;
@Service
public class ConfigService {
    public String get(String key){
        return "OK";
    }
}

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ConfigUtil {
	//注入服务
    private static ConfigService configService;
    //服务赋值
    @Autowired
    public void setConfigService(ConfigService configService) {
        ConfigUtil.configService = configService;
    }
    //静态方法
    public static String  get(String key){
        return configService.get(key);
    }
}

  注:此Set方法之上需加上 @Autowired 注解
3、基于default-autowire="byName" 实现代码,详细代码如下所示:

//配置服务
import org.springframework.stereotype.Service;
@Service
public class ConfigService {
    public String get(String key){
        return "OK";
    }
}

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ConfigUtil {
	
    private static ConfigService configService;
    //赋值服务方法
    public void setConfigService(ConfigService configService) {
        ConfigUtil.configService = configService;
    }
	//获取服务方法
    public static String  get(String key){
        return configService.get(key);
    }
}

注:此种方法中需要使用 @Autowired 注解,但是需要在spring 的配置xml 中加上default-autowire="byName" 配置,详细代码如下所示:

<!--spring.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"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
	   http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
      "  default-autowire="byName">
	  //...........
	  //...........
</beans>

以上代码均可实现将spring IOC容器中代理类,注入到工具类静态方法中,可根据个人习惯选择使用

 

Spring——IOC容器 ​目录 一、IOC底层原理 1、什么是IOC 2、IOC底层原理 3、画图讲解IOC底层原理 二、IOC接口 三、IOC操作Bean管理(概念) 四、IOC操作Bean管理(基于xml) 五、IOC操作Bean管理(xml注入其他类型属性) 六、IOC操作Bean管理(xml注入集合属性) 七、IOC操作Bean管理(FactoryBean) 八、IOC操作Bean管理(bean作用域) 九、IOC操作Bean管理(bean生命周期) 十、IOC操作Bean管理(xml自动装配) 十一、IOC操作Bean 阅读详情

相关推荐

Spring中的IOC容器的实现原理

缘起 通过前面的章节,我们知道了如何搭建spring源码的阅读环境,本篇文章主要了解Spring的IOC容器是如何实现的。 下面直接开始 IOC容器 我们可以通过一个简单的main方法来调试应用 跟踪进ClassPathXmlApplicationContext源码可以看到 这里主要做了3件事 动态确定使用哪个加载器加载配置文件 获取配置文件的路径 加载配置文件 我们直接看refresh()...

诺浅的专栏 4014

Spring管理工具类的方法

在开发中,我们经常会定义一些工具类,这些类中一般都是静态方法。使用时,直接使用类名.方法名调用即可,无需把工具类实例化。例如如下的工具类: public class Test { public static int add(int a, int b) { return a + b; } } 使用时, 直接调用 int result = Test.add...

徐刚的博客 3489

三维重建之条纹投影结构光(一)

该系列为条纹投影结构光学习笔记,一共分为四篇。第一篇记录文献阅读的笔记,对重要知识点进行摘录介绍。 本篇以理论知识推导为主,主要从以下三个方面进行介绍,首先介绍条纹投影的三角测量原理;然后介绍相位主值的求解和相位展开;最后介绍相位和高度的模型,即相高模型。本篇博文不涉及具体的代码实现。 条纹投影结构光测量原理 ...

beyond951的博客 3万+

普通工具类调用Spring 管理的容器

方法一:

qq_29086005的博客 295

MicroPython驱动ST7789屏避坑实录:从GB2312到完整中文字库的升级之路

本文详细介绍了使用MicroPython驱动ST7789显示屏实现完整中文字库显示的实战方案。从硬件选型到字库系统改造,再到内存优化和显示性能提升,提供了一套突破GB2312限制的全套中文显示解决方案,特别适合ESP32开发者在物联网设备中实现高质量中文显示。

weixin_29190573的博客 392

RK3588开发板量产前必做:24小时DDR压力测试到底在测什么?(附ArmSoM-W3测试脚本解析)

本文深入解析RK3588开发板量产前的24小时DDR压力测试,揭示其核心价值与技术原理。通过memtester、stressapptest和变频测试的组合使用,全面验证DDR内存稳定性。特别介绍ArmSoM-W3测试脚本的创新设计,包括并行测试架构和异常熔断机制,为开发者提供可靠的量产测试方案。

weixin_30325487的博客 454

Spring IoC 容器将无法注入static属性变量

当属性被标记为 static 时,Spring IoC 容器将无法注入该属性,因为 static 属性不属于类的实例。

zrf999的博客 364

Qwen大模型参数解析

Qwen系列模型的参数主要分为(决定模型结构)和(控制生成行为)两类。由于该系列已迭代多个版本,参数设计也在不断演进,我会结合最新版本为你进行分层梳理。

yeyiboy的博客 165

如何使用spring容器在一个类中调用另一个类的方法。

学了spring容器之后,最基本的就是这个在一个类中调用另一个类中的方法了。本文讲述的就是如何使用spring容器从一个类调用另一个类的方法。首先,我们先新建一个Student类,在类中创建一个int类型的方法。如图: 第一个类Student就完成了,那么我们再建第二个类,在第二个类中创建一个容器对象,并且调用第一个类Student中的aaa()方法。详见图: 然后我们再配置bean.xml ...

qq_40136594的博客 3972

构建.NET网站:VSCode还是Visual Studio?揭开开发工具的选择之谜

选择VSCode还是Visual Studio,归根结底是取决于你的具体需求和偏好。🔍 这两款工具各有千秋,都能为你的.NET网站开发提供强大的支持。希望这篇文章能够帮助你更全面地了解这两款工具,做出明智的选择。

墨夶的博客 787

【本地部署实战】LM Studio深度使用指南:从环境搭建到模型调优

LM Studio通过极简的操作流程和强大的生态兼容性,让本地部署大模型成为可能。随着M4芯片的发布和CUDA 12.0的优化,未来本地化AI开发将迎来新的爆发点。建议开发者关注官方Discord社区(https://discord.gg/lmstudio)获取最新模型支持信息。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 8749

spring IOC容器的三种注入方式

spring IOC容器的三种注入方式 set方法注入 把需要注入的类写成属性,给它设置一个set方法。实现代码如下: public class B { private A a; public void setA(A a){ this.a == a; } } 接着在配置文件中类A注入到类B里面去 &amp;amp;lt;bean id=&amp;quot;aa&amp;quot; class=&amp;quot;com.study.j

qq_43489222的博客 9133

玩转 InternVL3.5 轻量级实战:从部署到优化的全记录

玩转 InternVL3.5 轻量级实战:从部署到优化的全记录

jacke121的专栏 626

什么是Spring IoC容器?

Spring IoC负责创建对象、管理对象(通过依赖注入(DI)、装配对象、配置对象,并且管理这些对象的整个生命周期。

南_茗的博客 1万+

运放比较电路分析以及应用

摘要:本文介绍了基于LM321运放的同相输入型单限电压比较器电路。该电路通过运放开环工作模式实现电平判断:当输入信号Vs+>0V时输出+15V高电平,Vs+<0V时输出≈0V低电平。典型应用包括直流电压过零检测、交流信号整形、电池欠压报警和数字信号噪声过滤。电路具有结构简单(仅需1个运放和1个电阻)、成本低的优势,适用于传感器信号处理、波形转换等场景。使用时需注意参考电平调整、输出电平匹配等问题,如需抗噪声可增加正反馈电阻构成施密特触发器。该电路是运放实现简单电平逻辑的经典方案。

qq_37999850的博客 395

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring 框架入门介绍及IoC的三种注入方式

- 用Spring框架来实现全新的控制反转方法,让你的应用程序更加灵活和易于维护 - 创建一个基于Spring框架的控制反转教程,帮助开发人员更好地理解和运用这个设计模式 - 探索Spring框架中控制反转的潜在优势,包括减少模块之间的耦合、提升可测试性和可扩展性 - 设计一个创新的Spring应用程序,利用控制反转实现模块之间的松耦合关系 - 分析控制反转在Spring框架中的实际应用,包括依赖注入和依赖查找的使用场景

让优秀成为一种习惯! 2831

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring框架及Spring IoC核心容器介绍

SpringIoC核心容器介绍及其使用方式,推荐注解+配置类!!

weixin_44525733的博客 2514

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring IoC容器

核心技术 发行版5.0.8 这一部分的指导文档覆盖了所有的完全集成到Spring框架中的技术。 这些技术中首要的便是Spring框架的控制反转(IoC)容器。Spring框架的IoC容器的全面的处理是与Spring的面向切面编程(AOP)的彻底实现紧密相关的。Spring框架拥有他自己的AOP框架,该技术在概念上是很容器理解的,并且成功的解决了在Java企业编程中的AOP需求的80%的点。 该框...

hongbochen1223的专栏 1万+

IOC 和 AOP、Ioc的三种实现方式:基于xml的方式、注解的方式、基于配置类的方式

IOC 和 AOP、Ioc的三种实现方式:基于xml的方式、注解的方式、基于配置类的方式

hutao8896的博客 3274

spring6-IOC容器

IOC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。

m0_62946761的博客 3284

Spring框架:启动IOC容器的三种方式

前期准备工作 创建项目时需要用到的框架有Java和Web 创建项目完成之后的目录 通过BeanFactory启动IOC容器 bean文件入在类路径classpath下 bean文件放在文件系统FileSystem目录下 通过ApplicationContext类启动IOC容器 通过WebApplicationContext类启动IOC容器 总结前期准备工作使用IDE:IDEA创建项目时需要用到的框架

Czuaphe的博客 4103

Spring之IOC容器

本文讲解的SpringIoc的知识点,对比传统代码,SpringIoc的优点,通过控制反转,如何获取Bean的两种方法,以及配置的xml文件

tq02的博客 1733

Spring为IOC容器注入Bean的方式

Spring提供的主要功能就是对于bean的管理,提供了多种方式可以向容器中注入bean,下面来总结一下向IOC容器注入bean的几种方式(以下注入bean的方式都是基于注解完成的): 1、@ComponentScan+@Component方式 @ComponentScan可以扫描指定包下的类,如果该包下的类标有@Component、@Service、@R...

qq_35634181的博客 2695

获取Spring IOC容器中bean对象

Spring常用的开发框架有SpringMVC和SpringBoot,很多时候后都是用@Component,@Service等注解类,或者在Spring配置文件中声明bean,使用的时候,在通过 @Resource或者 @Resource注解获取对象,但在某些情况下,无法使用自动注解获取对象,这个时候就需要从IOC容器中获取bean对象。

@Xiao.Ran的博客 2619

Spring 核心指南(上):IoC 容器与配置方式详解

在Java开发领域,**Spring框架** 是一种极为流行的企业级开源框架,以其轻量、易扩展和模块化的特性受到了广泛的欢迎。Spring框架的核心目标是**简化Java开发**,通过提供基础设施支持,让开发人员专注于业务逻辑的实现。Spring框架的核心模块之一是**Spring IoC(Inversion of Control)容器**,它是实现**依赖注入(DI, Dependency Injection)**的基础。 本文将对Spring框架做一个简要介绍,随后深入探讨**IoC**的概念、Sp

qq_36534560的博客 1405

Spring之IoC容器篇

Spring是一个开源的应用程序开发框架,它由Rod Johnson创建,主要用于构建企业级Java应用程序。它提供了一个全面的编程和配置模型,可以简化Java开发过程,提高开发效率和可维护性。即为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能范围:任何Java应用简单来说,

kissship的博客 1864
上一篇: nginx OpenResty lua resty http 代理网关从无到有搭建
下一篇: idea 通过正则表达式找到不匹配字符串内容进行全局查找、替换
TimerBin
博客等级 码龄12年 54粉丝 119原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值