`

(转)Spring不支持依赖注入static静态变量

 
阅读更多

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

@Autowired
private static YourClass yourClass;

可以试一下,yourClass在这种状态下不能够被依赖注入,会抛出运行时异常java.lang.NullPointerException,为什么呢?静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入.

而使用静态变量/类变量扩大了静态方法的使用范围.静态方法在spring是不推荐使用的.依赖注入的主要目的,是让容器去产生一个对象的实例,然后在整个生命周期中使用他们,同时也让testing工作更加容易.

一旦你使用静态方法,就不再需要去产生这个类的实例,这会让testing变得更加困难,同时你也不能为一个给定的类,依靠注入方式去产生多个具有不同的依赖环境的实例.这种static field是隐含共享的,并且是一种global全局状态,spring同样不推荐这样去做

分享到:
评论

相关推荐

    static静态变量使用@Value注入方式.md

    ### static静态变量使用@Value注入方式 #### 一、引言 在Java开发中,特别是基于Spring框架的应用程序中,开发者经常会遇到需要为类中的成员变量注入外部配置值的情况。Spring框架提供了多种注入机制,其中`@Value...

    Spring不能注入Static变量的原因及Spring注入静态变量

    然而,Spring并不支持直接注入静态变量,这主要是由于静态变量的特性与依赖注入的设计原则相冲突。 首先,让我们了解一下为什么Spring依赖注入通常不适用于静态变量。静态变量属于类级别,而不是对象级别,这意味着...

    spring boot静态变量注入配置文件详解

    但是,Spring Boot 框架中不支持直接进行静态变量值的注入。 例如,在下面的代码中,我们定义了一个 KafkaConfig 类,其中包含一个静态变量 logBrokerList: ```java @Component(value = "KafkaConfig") @...

    springboot 使用yml配置文件给静态变量赋值教程

    由于我们有一个静态工具类`ClickHouseUtil`,其中的方法依赖于静态变量,所以我们不能直接使用`@Value`注解为静态变量赋值。Spring框架不允许在静态字段上直接注入值,因为它不支持实例化静态对象。 为了解决这个...

    Spring boot工具类静态属性注入及多环境配置详解

    Spring Boot工具类静态属性注入是指使用Spring Boot框架时,如何将配置信息注入到工具类的静态变量中,以便在程序中使用这些配置信息。这种方式可以方便地在不同的环境中切换配置信息,例如在开发环境中使用本地的...

    spring static静态方法里面注入bean空指针解决

    然而,静态方法和静态变量不参与Spring的生命周期管理,因此,尝试在静态字段或静态方法中直接使用`@Autowired`注入Bean会导致空指针异常,因为Spring容器不会初始化静态成员。 **解决方法1:使用@Component和非...

    Spring Boot使用Value注解给静态变量赋值的方法

    在 Spring Boot 框架中,我们经常需要将配置文件中的值注入到静态变量中,但是默认情况下,Spring Boot 不支持将值注入到静态变量中。这是因为静态变量是属于类的,而不是实例的,而 Spring Boot 的注入机制是基于...

    springboot无法从静态上下文中引用非静态变量的解决方法

    解决办法是使用spring的set注入方法来将非静态变量注入静态变量。下面是一个示例代码: ```java @PropertySource(value = {"classpath:config/application.yml"}, ignoreResourceNotFound = true, encoding="UTF-8...

    spring项目启动加载类到静态服务类中的三种方式.zip

    在Spring Boot项目中,我们经常需要在静态服务类中使用由Spring管理的bean,以便于在不依赖于ApplicationContext的情况下访问和使用服务。本教程将详细阐述三种不同的方式,将Spring项目启动时加载的类集成到静态...

    日志组件(spring依赖)

    在Spring应用中使用日志时,我们通常会创建一个名为`Logger`的静态成员变量,它是`org.slf4j.Logger`或`org.apache.log4j.Logger`的实例,然后在需要记录日志的地方调用其提供的方法,如`info()`, `debug()`, `error...

    java无法从静态上下文中引用非静态一些错误

    java初学者在编写类,在调用方法,在静态方法与动态方法使用会出现的一些错误。 学习后 能初步了解自己的错误的原因 以及遇到这种错误的改正方法 避免下次踩坑

    知识共享-spring属性注入(雷惊风).

    该工厂Bean用于获取类的静态变量,并将其注入到其他Bean的属性中。例如,在`CarBrandType`接口中定义了两个常量`HONG_QI`和`JI_LI`,然后通过配置`FieldRetrievingFactoryBean`来获取这些常量,并将其注入到`Car`类...

    spring-boot html thymeleaf

    3. **模型数据注入**:在 Spring 控制器中,可以通过 `Model` 或 `ModelAndView` 将数据传入视图,Thymeleaf 在渲染时会自动查找并替换对应的变量。 4. **模板缓存**:Thymeleaf 支持模板缓存,提高页面渲染速度,...

    Spring@Autowired注解与自动装配.rar

    - 不要在`static`字段或静态方法上使用`@Autowired`,因为它们在Spring容器之外初始化,不支持依赖注入。 - 如果`@Autowired`和JSR 330的`@Inject`同时存在,Spring会优先考虑`@Autowired`。 ### 6. 总结 `@...

    Spring Boot2 教程1

    此外,Spring Boot提供了路径变量和多参数的支持,使得路径映射更加灵活。 在教程的【部分内容】中,我们看到了一个使用纯Java配置的Spring Boot应用的创建过程,其中包括: 1. **创建工程**: 创建一个Maven项目...

    Java面试题带答案.docx

    - Spring是一个轻量级的JAVA EE框架集合,它实现了依赖注入模式,并提供了声明式事务管理、AOP(面向切面编程)支持,比如日志系统。Spring还提供了MVC架构模式的支持,通过`DispatcherServlet`作为核心控制器接收...

    Spring Boot.docx

    此外,Spring Boot 还提供了对静态资源(如 HTML、CSS、JavaScript 文件)的便捷支持,只需将它们放在 `src/main/resources/static` 目录下,即可自动处理 HTTP 请求。 在实际开发中,Spring Boot 还有许多其他强大...

Global site tag (gtag.js) - Google Analytics