专栏首页javathings为什么 spring 中,不支持 autowired 静态变量?

为什么 spring 中,不支持 autowired 静态变量?

为什么 spring 中,不支持 autowired 静态变量?

因为静态变量是属于本身类的信息,当类加载器加载静态变量时,Spring 的上下文环境还没有被加载,所以不可能为静态变量绑定值。

同时,Spring 也不鼓励为静态变量注入值,因为这会增加了耦合度,对测试不友好。但还是有很多方法来绕过这些限制,实现对静态变量注入值。

比如用 set 方法作为跳板,在里面实现赋值。

静态变量的注入

@Component
@PropertySource(value = { "classpath:/mine.properties" })
public class User {
	public static LogHelper loghelper;
	@Autowired
	public void setLoghelper(LogHelper loghelper) {
		System.out.println("autowired loghelper....");
		User.loghelper = loghelper;
	}
 
}

或者使用 PostConstruct 当跳板。

@Component
@PropertySource(value = { "classpath:/mine.properties" })
public class User {
	public static LogHelper loghelper;
	@Autowired
	private LogHelper loghelper1;
	@PostConstruct
	public void init() {
		System.out.println("autowired loghelper....");
		User.loghelper = loghelper1;
	}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用@Value 和@PropertySource 实现为属性赋值

    基于 SpEL 表达式也很简单,只需要写 SpEL 表达式,可以参考 Spring Expression Language(SpEL)速查指南

    水货程序员
  • Spring 中 Bean 的生命周期

    所谓 Bean 的生命周期,就是一个 Bean 从创建到销毁,所经历的各种方法调用。大致包含下面几个方法(不是全部)

    水货程序员
  • Spring 中的自动装配,如果遇到多个实例如何处理?

    标记了@Autowired 注解的字段/方法,会由 Spring 容器自动的赋值一个实例化的对象。@Autowired 总是采用 byType 的方式实现自动装...

    水货程序员
  • 浅谈.Net反射 4

    System.Reflection命名空间下的Assembly类型,代表了一个程序集,并包含了关于程序集的信息。

    小蜜蜂
  • 【asp.net core 系列】10 实战之ActionFilter

    在上一篇中,我们提到了如何创建一个UnitOfWork并通过ActionFilter设置启用。这一篇我们将简单介绍一下ActionFilter以及如何利用Act...

    程序员小高
  • .NET如何生成大量随机数据

    在演示Demo、数据库脱敏、性能测试中,有时需要生成大量随机数据。Bogus就是.NET中优秀的高性能、合理、支持多语言的随机数据生成库。

    心莱科技雪雁
  • C# 基础知识系列- 4 面向对象

    面向对象是一个抽象的概念,其本质就是对事物以抽象的方式建立对应的模型。简单来讲,比如我有一只钢笔,那么我就可以通过分析,可以得到 这只钢笔的材第是塑料,品牌是个...

    程序员小高
  • The Clean Architecture in PHP 读书笔记(五)The Clean Architecture in PHP 读书笔记(五)

    上篇最重要的是介绍了去耦的工具之一依赖注入,本篇将继续介绍去耦工具:接口和适配器,本文是The Clean Architecture in PHP的第5篇。

    zhuanxu
  • 犯错是人的天性:如何减少人为失误造成的信息安全事故?

    2014年IBM网络安全情报检索显示,高达95%的信息安全事件与人为失误(故意或无意)有关。人为失误不仅仅是影响网络安全的重要因素,同样在航空事故和医疗事故中扮...

    FB客服
  • C# 数据操作系列 - 14 深入探索SqlSugar

    在上一篇中,我们知道了如何使用SqlSugar,但是也只是简单的了解了如何使用,仿佛是套着镣铐行走,这明显不符合一个合格的程序员应有的素养。所以,这一篇我们将对...

    程序员小高

扫码关注云+社区

领取腾讯云代金券