Spring静态注入

2023-10-27


原文链接:http://blog.csdn.net/chen1403876161/article/details/53644024


spring静态注入的三种方式:

(说明:MongoFileOperationUtil是自己封装的一个Mongodb文件读写工具类,里面需要依赖AdvancedDatastore对象实例,dsForRW用来获取Mongodb数据源)

在springframework里,我们不能@Autowired一个静态变量,使之成为一个spring bean,例如下面这种方式:

[java]  view plain  copy
  1. @Autowired  
  2. private static AdvancedDatastore dsForRW;  
可以试一下, dsForRW 在这种状态下不能够被依赖注入,会抛出运行时异常java.lang.NullPointerException,为什么呢?静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。
但是自己比较喜欢封装工具类,并通过@Component注解成功能组件,但是功能组件中的方法一般都是静态方法,静态方法只能调用静态成员变量,于是就有了下面的问题。封有的时候封装功能组件会需要底层的service注入,怎么办呢?

去网上搜了下解决办法,简单总结一下几种实现方式;

1.xml方式实现;

[html]  view plain  copy
  1. <bean id="mongoFileOperationUtil" class="com.*.*.MongoFileOperationUtil" init-method="init">  
  2.     <property name="dsForRW" ref="dsForRW"/>  
  3. </bean>  

[java]  view plain  copy
  1. public class MongoFileOperationUtil {  
  2.       
  3.     private static AdvancedDatastore dsForRW;  
  4.   
  5.     private static MongoFileOperationUtil mongoFileOperationUtil;  
  6.   
  7.     public void init() {  
  8.         mongoFileOperationUtil = this;  
  9.         mongoFileOperationUtil.dsForRW = this.dsForRW;  
  10.     }  
  11.   
  12. }  
这种方式适合基于XML配置的WEB项目;


2.@PostConstruct方式实现;

[java]  view plain  copy
  1. import org.mongodb.morphia.AdvancedDatastore;  
  2. import org.springframework.beans.factory.annotation.Autowired;  
  3.   
  4.   
  5. @Component  
  6. public class MongoFileOperationUtil {  
  7.     @Autowired  
  8.     private static AdvancedDatastore dsForRW;  
  9.   
  10.     private static MongoFileOperationUtil mongoFileOperationUtil;  
  11.   
  12.     @PostConstruct  
  13.     public void init() {  
  14.         mongoFileOperationUtil = this;  
  15.         mongoFileOperationUtil.dsForRW = this.dsForRW;  
  16.     }  
  17.   
  18. }  
@PostConstruct 注解的方法在加载类的构造函数之后执行,也就是在加载了构造函数之后,执行init方法;(@PreDestroy 注解定义容器销毁之前的所做的操作)

这种方式和在xml中配置 init-method和 destory-method方法差不多,定义spring 容器在初始化bean 和容器销毁之前的所做的操作;


3.set方法上添加@Autowired注解,类定义上添加@Component注解;

[java]  view plain  copy
  1. import org.mongodb.morphia.AdvancedDatastore;  
  2. import org.springframework.beans.factory.annotation.Autowired;  
  3. import org.springframework.stereotype.Component;  
  4.   
  5.   
  6. @Component  
  7. public class MongoFileOperationUtil {  
  8.   
  9.     private static AdvancedDatastore dsForRW;  
  10.       
  11.     @Autowired  
  12.     public void setDatastore(AdvancedDatastore dsForRW) {  
  13.         MongoFileOperationUtil.dsForRW = dsForRW;  
  14.     }  
  15. }  

首先Spring要能扫描到AdvancedDatastore的bean,然后通过setter方法注入;

然后注意:成员变量上不需要再添加@Autowired注解;

原文链接:http://blog.csdn.net/chen1403876161/article/details/53644024

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring静态注入 的相关文章

  • 懂编译真的可以为所欲为

    作者 闲鱼技术 玉缜 背景 整个前端领域在这几年迅速发展 前端框架也在不断变化 各团队选择的解决方案都不太一致 此外像小程序这种跨端场景和以往的研发方式也不太一样 在日常开发中往往会因为投放平台的不一样需要进行重新编码 前段时间我们需要在淘
  • SAE安装第三方插件

    参考官网 http sae sina com cn doc python tools html saecloud 首先要安装sae python dev 1 3 2 tar gz 然后把官网的原话copy上来 在应用目录中执行下面的命令安装
  • 点云密度计算方法matlab,点云中的几何计算及matlab源码

    1 计算法向量 2 计算曲率 曲线的曲率 curvature 就是针对曲线上某个点的切线方向角对弧长的转动率 通过微分来定义 表明曲线偏离直线的程度 数学上表明曲线在某一点的弯曲程度的数值 曲率越大 表示曲线的弯曲程度越大 曲率的倒数就是曲

随机推荐

  • jdbc:mysql:replication_使用Mysql的Replication功能实现数据库同步

    本文档仅在于实验Mysql的Replication功能 没有考虑权限等其他问题 用于实验的服务器和客户机请使用没有安装过Mysql的计算机 如果安装过Mysql请卸载 请按照下面的顺序依次进行 改变顺序可能导致实验失败 1 在下面地址下载免
  • 会议OA项目---我的审批(审批&会议签字)

    目录 一 会议审批 二 会议签字 三 签名裁剪 一 会议审批 我的审批 实体类MeetingAudit package com zking entity import java io Serializable import java uti
  • C语言经典例题-贷款余额

    编程计算第一 第二 第三个月还贷后剩余的贷款金额 include
  • Revit二次开发——选集

    选集 选集 用户选集 过滤的用户选集 选集 选择图元后运行外部命令获取选择的内容 Revit API中定义了单选 多选 框选等方式的用户选集 用户可以十分方便的使用鼠标和键盘完成这三种方式的图元选择 Revit API根据三种用户选集各自的
  • 设系统中有三种类型的资源(A,B,C)的五个进程(P1,P2,P3,P4,P5)。A资源的数量为17,B资源的数量为5,C资源的数量为20。在T0时刻系统状态如表所示。

    银行算法应用 题目 设系统中有三种类型的资源 A B C 的五个进程 P1 P2 P3 P4 P5 A资源的数量为17 B资源的数量为5 C资源的数量为20 在T0时刻系统状态如表所示 系统采用银行家算法实施死锁避免策略 试问 1 T0时刻
  • centos7启动服务uthorization not available. Check if polkit service is running or see debug message for

    事件经过 有一次远程帮助别人解决的一个问题 当时那个人给发了一个samba服务启动报错的截图 还有一个翻译图 报错信息中提到了一个polkit服务 下面先普及一下关于这个服务的知识 polkit是一个应用程序级别的工具集 通过定义和审核权限
  • 浅析存储引擎(3)-B-tree

    浅析日志结构的存储引擎 1 bitcask浅析日志结构的存储引擎 2 SSTable和LSM Tree 前面两篇文章介绍了比较好理解的日志结构引擎LSM Tree 但它们不是最常见的索引类型 目前最广泛使用的索引结构是B tree B tr
  • input函数和int函数的使用

    第一 input函数接受一个标准输入数据 返回str类型 第二 int函数可以把str强制转换为整形 第三 int input ps 最近搞深度学习的视频 但是依然需要实操
  • 2023华为OD机试真题-寻找关键钥匙(JAVA、Python、C++)

    题目描述 小强正在参加 密室逃生 游戏 当前关卡要求找到符合给定 密码K 升序的不重复小写字母组成 的箱子 并给出箱子编号 箱子编号为1 N 每个箱子中都有一个字符串s 字符串由大写字母 小写字母 数字 标点符号 空格组成 需要在这些字符串
  • Webview setLayoutAlgorithm

    表示这个东西还是不用的为好 前端工程师会为自己的弹出框设置好位置 不必要手机端再来做弹出框的设置 要不就直接弹出原生弹出框 第一种 java WebSettings settings webView getSettings settings
  • TenSEAL学习笔记二

    文章目录 Training and Evaluation of Logistic Regression on Encrypted Data Download the coronary heart disease dataset Initia
  • 华为机试(JAVA)真题Od【A卷+B卷】2023

    目录 华为OD机试是什么 华为OD面试流程 华为OD机试通过率高吗 华为OD薪资待遇 华为OD晋升空间 大家好 我是哪吒 本专栏包含了最新最全的华为OD机试真题 有详细的分析和Java代码解答 已帮助1000 同学顺利通过OD机考 发现新题
  • gdb+gdbserver远程调试

    gdb gdbserver远程调试 文章目录 gdb gdbserver远程调试 一 gdb gdbserver交叉编译 1 源码下载 2 编译gdb 3 交叉编译gdbserver 二 远程使用gdbserver 1 attach调试运行
  • 为什么闹钟设置了却不响_手机闹钟不响是怎么回事 怎么设置闹钟【图文】

    手机大家都比较了解吧 手机由之前的来款式手机发展到了现在的4G大屏手机 这就是时代进步的见证 手机有很多的功能 但是今天小编给大家介绍的这个功能虽说不是什么 高科 技的功能 但是它确实最实用的 尤其是对于我们这些每天工作或者学习的人来说 这
  • Microsoft Visual C++下载,VC++下载

    Microsoft Visual C 2019 v14 28 29617 Microsoft Visual C Redistributable 系统运行库 简称MSVC VB VC 是Windows操作系统应用程序的基础类型库组件 Micr
  • Nginx反向代理proxy_pass

    一 概述 代理 proxy 即中间人 它代替客户端发送请求给服务器 收到响应后再转给客户端 通常意义上的代理是从用户的角度讲的 用户通过某个代理可以访问多个网站 这个代理是靠近用户的 比如某些公司可能需要限制员工所访问的网站 就会在网络出口
  • MySQL-多表查询

    一 表架构 student sid sname sage ssex 学生表 course cid cname tid 课程表 sc sid cid score 成绩表 teacher tid tname 教师表 二 建表sql语句 SET
  • STM32 进阶教程 1 - micropython 移植

    原文 https blog csdn net zhanglifu3601881 article details 91997528 前言 Python是一种解释型 面向对象 动态数据类型的高级程序设计语言 Python 是一个高层次的结合了解
  • 11.AOP之注解配置

    1 使用IDEA创建工程 2 引入项目使用的依赖
  • Spring静态注入

    原文链接 http blog csdn net chen1403876161 article details 53644024 spring静态注入的三种方式 说明 MongoFileOperationUtil是自己封装的一个Mongodb