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

下面给大家介绍spring不能注入static变量的原因,具体详情如下所示:

Spring 依赖注入 是依赖 set方法

set方法是 是普通的对象方法

static变量是类的属性

 @Autowired
 private static JdbcTemplate jdbcTemplate;

单纯看这个注入过程是没有报错的,但是在接下来的jdbcTemplate.query()会报空指针错误.

ps:Spring注入静态变量

今天碰到一个问题,我的一个工具类提供了几种静态方法,静态方法需要另外一个类的实例提供处理,因此就写出了这样的代码:

 Class Util{
  private static XXX xxx;
  xxx = BeanUtil.getBean("xxx");
  public static void method(){
    xxx.func();
  }
  public static void method(){
    xxx.func();
  }
 }

  这里是使用的getBean的方式,获得XXX的实例,但是别人说这个方法不好,想要注入的方式。

  但是静态的XXX如何注入呢?

  上网查了很多的说法,其实很简单:

 Class Util{
  private static XXX xxx;
  public void setXxx(XXX xxx){
    this.xxx = xxx;
  }
  public void getXxx(){
    return xxx;
  }
  public static void method1(){
    xxx.func1();
  }
  public static void method2(){
    xxx.func2();
  }
}

  在xml中正常配置注入就可以了。

<bean value="test" class="x.x.x.Util">
  <property value="xxx" ref="xxx"/>
</bean>

  这里要注意,自动生成的getter和setter方法,会带有static的限定符,需要去掉,才可以。

(0)

相关推荐

  • SpringMVC文件上传 多文件上传实例

    必须明确告诉DispatcherServlet如何处理MultipartRequest.SpringMVC中提供了文件上传使用方式如下配置xxx-servlet.xml,添加如下代码: 复制代码 代码如下: <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">          <!-- 设置

  • SpringMVC+MyBatis声明式事务管理

    采用的基本搭建环境:SpringMVC.MyBatis.MySQL.tomcat Spring事务管理分解了传统的全局事务管理和本地事务管理的劣势,使得在任何环境中都可以使用统一的事务管理模型,你可以写一次代码,然后在不同的环境从你的代码里面配置不同的事务管理策略,Spring提供两种事务管理策略:一种是声明式事务管理策略,另一种是编程式事务管理策略,这里主要介绍声明式事务管理策略 由于采用的是SpringMVC. MyBatis,故统一采用了标注来声明Service.Controller 由于

  • SpringMail使用过程中的报错解决办法

    SpringMail使用过程中的报错解决办法 1.Unable to locate provider for protocol: smtp –>缺少依赖造成的 <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> <dependency

  • Spring实现文件上传(示例代码)

    在实际开发中,经常遇到要实现文件上传到服务器端的功能.Spring可以继承commons-fileupload插件来实现文件上传的功能.分为前端JSP编写和后台Controller的编写. 前期准备工作,首先要引入commons-fileupload这个jar包,pom.xml中的配置如下: 复制代码 代码如下: <!-- 实现文件上传,spring集成了这个功能 --><dependency> <groupId>commons-fileupload</group

  • springboot与mybatis整合实例详解(完美融合)

    简介 从 Spring Boot 项目名称中的 Boot 可以看出来,Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目.它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用.Spring Boot 会选择最适合的 Spring 子项目和第三方开源库进行整合.大部分 Spring Boot 应用只需要非常少的配置就可以快速运行起来. Spring Boot 包含的特性如下: 创建可以独立运行的 Spring 应用. 直接嵌入 Tomc

  • Spring事务管理只对出现运行期异常进行回滚

    一.结论 Spring的事务管理默认只对出现运行期异常(java.lang.RuntimeException及其子类)进行回滚. 如果一个方法抛出Exception或者Checked异常,Spring事务管理默认不进行回滚. 关于异常的分类一下详细介绍: 1.基本概念 看java的异常结构图  Throwable是所有异常的根,java.lang.Throwable Error是错误,java.lang.Error Exception是异常,java.lang.Exception 2.Excep

  • Spring中的事务管理实例详解

    本文实例讲述了Spring中的事务管理.分享给大家供大家参考.具体分析如下: 事务简介: 事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性 事务就是一系列的动作,它们被当作一个单独的工作单元.这些动作要么全部完成,要么全部不起作用 事务的四个关键属性(ACID) ① 原子性(atomicity):事务室一个原子操作,有一系列动作组成.事务的原子性确保动作要么全部完成,要么完全不起作用 ② 一致性(consistency):一旦所有事务动作完成,事务就被提交.数据和资源就

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

    下面给大家介绍spring不能注入static变量的原因,具体详情如下所示: Spring 依赖注入 是依赖 set方法 set方法是 是普通的对象方法 static变量是类的属性 @Autowired private static JdbcTemplate jdbcTemplate; 单纯看这个注入过程是没有报错的,但是在接下来的jdbcTemplate.query()会报空指针错误. ps:Spring注入静态变量 今天碰到一个问题,我的一个工具类提供了几种静态方法,静态方法需要另外一个类的

  • spring 如何将配置信息注入静态变量的方法

    我们学习过将配置信息,通过@Value()的方法注入到对象的变量.这是由于对象是由spring来托管的.那么非spring如果,我们需要在静态方法中,使用配置文件中的值,又该怎么做呢? 传统的错误作法 application.properties spring.redis.host=test @Component public class RedisServiceImpl implements RedisService { ... @Value("${spring.redis.host}&quo

  • Spring 注入static属性值方式

    目录 Spring 注入static属性值 1. 问题 2. 解决方案 Spring依赖注入static静态变量相关问题 1.Spring不支持依赖注入static静态变量 2.Spring如何给静态变量注入值 3.Spring静态注入的三种方式 去网上搜了下解决办法,简单总结一下几种实现方式 Spring 注入static属性值 本文介绍Spring中如何从属性文件给static字段注入值.实际应用中一些工具类中static属性值需读取配置文件,实现该功能可以让工具类提供静态方法更易使用. 1

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

    昨天在使用@Value注解给静态变量赋值的时候,发现静态变量的值始终是null.后来搜索一下得知其中原因,Spring Boot 不允许/不支持把值注入到静态变量中.但是我们可以变通一下解决这个问题.因为Spring Boot 支持set方法注入,我们可以利用非静态set方法注入静态变量.废话不多说,贴上我昨天写的代码: @Component public class CoverImageUtil { private static String endpoint; private static

  • 基于@PostConstruct注解的使用,解决向静态变量注入值

    目录 @PostConstruct注解的使用,向静态变量注入值 说说思路 @PostConstruct和静态变量注入和spring初始化 执行顺序 关于spring初始化操作 @PostConstruct注解的使用,向静态变量注入值 今天在编写工具类时遇到了一个问题,一般在定义工具类方时,我们会将工具类中的方法定义成static类型,使用时可以通过类名.方法名获取该方法,无需实例化出对象才能使用其内部方法,但是当有些参数在配置文件中定义时,我们需要拿到这些参数就需要在工具类方法使用@Value注

  • SpringBoot通过@Value实现给静态变量注入值详解

    目录 一.简介 二.@Value给静态变量注入值 方案一 方案二 三.总结 一.简介 SpringBoot 中给普通变量注入值只需在变量上添加 @Value 注解即可. application.properties 配置文件有如下配置: mail.name=admin@163.commain.pwd=admin123 给普通变量赋值时,直接在变量声明之上添加 @Value() 注解即可. @Value("${mail.name:admin@163.com}") private Stri

  • php中static静态变量的使用方法详解

    看看下面的实例: 复制代码 代码如下: <?php function Test() { $w3sky = 0; echo $w3sky; $w3sky++; } ?> 本函数每次调用时都会将 $w3sky 的值设为 0 并输出 "0".将变量加一的 $w3sky++ 没有其到效果,因为一旦退出本函数则变量 $w3sky 就不存在了.要写一个不会丢失本次计数值的计数函数,要将变量 $w3sky 定义为静态(static)的: 如下: 复制代码 代码如下: <?php f

  • PHP中的静态变量及static静态变量使用详解

    静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中.一般的函数内变量在函数结束后会释放,比如局部变量,但是静态变量却不会.就是说,下次再调用这个函数的时候,该变量的值会保留下来. 只要在变量前加上关键字static,该变量就成为静态变量了. <?php function test() { static $nm = ; $nm = $nm * ; print $nm."<br />"; } // 第一次执行,$nm = test(); // 第一次执行,$nm

  • 浅谈Android中关于静态变量(static)的使用问题

    项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom和cpu紧张问题,因为是工业平板不方便调试,用了些比较笨的方法最后锁定在几个用了static的地方.在这里记录下Android中使用static的一些问题. 静态变量的生命周期遵守Java的设计.静态变量在类被load的时候分配内存,并存在于方法区.当类被卸载时,静态变量被销毁.在PC机的客户端程序中,一个类被加载和卸载,可简单的等同于jvm进程的启动和结束.在Android中,用的DVM也是一样的,不过And

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

    声明: 此处需求是修改封装的clickhouseUtil数据查询引擎连接工具类.由于此类中的方法都是静态方法.连接地址等参数需要根据不同环境改变.例如开发下地址,测试下地址,生产地址等,所有通过配置文件来获取不同环境下的配置参数,但是使用的方法是静态的,所有不能使用一般情况下的@value直接给变量赋值,需要用到spring 属性的set方法来给静态变量赋值,然后静态方法使用静态变量即可 方法: 第一步:在yml文件中配置需要的参数 clickhouse: address: jdbc:click

随机推荐