原因

配置缺失,比如为开启注解扫描驱动、注入组件为注册;

使用 new 关键字创建的对象不受spring容器管理,无法注入;

注入静态变量, 静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。

懂的直接上代码先

静态注入的三种方式

在一些工具类中可能会依赖 service 层的对象,一般情况下工具类都是使用静态方法,对应的成员变量也需要声明为静态的,此时如果直接使用 @Autowired 进行依赖注入,在方法调用的时候会报 NullpointerException.

@Autowiredprivate static AdvancedDatastore dsForRW;

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

但是自己比较喜欢封装工具类,并通过@Component注解成功能组件,但是功能组件中的方法一般都是静态方法,静态方法只能调用静态成员变量,于是就有了下面的问题。封有的时候封装功能组件会需要底层的service注入,怎么办呢?

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

1.xml方式实现

这种方式适合基于XML配置的WEB项目;

1

2

3

public class MongoFileOperationUtil {

private static AdvancedDatastore dsForRW;

private static MongoFileOperationUtil mongoFileOperationUtil;

public void init() {

mongoFileOperationUtil = this;

mongoFileOperationUtil.dsForRW = this.dsForRW;

}

}

2.@PostConstruct方式实现importorg.mongodb.morphia.AdvancedDatastore;importorg.springframework.beans.factory.annotation.Autowired;

@Componentpublic classMongoFileOperationUtil {

@Autowiredprivate staticAdvancedDatastore dsForRW;private staticMongoFileOperationUtil mongoFileOperationUtil;

@PostConstructpublic voidinit() {

mongoFileOperationUtil= this;

mongoFileOperationUtil.dsForRW= this.dsForRW;

}

}

@PostConstruct 注解的方法在加载类的构造函数之后执行,也就是在加载了构造函数之后,执行init方法;(@PreDestroy 注解定义容器销毁之前的所做的操作)

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

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

importorg.mongodb.morphia.AdvancedDatastore;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Component; @Componentpublic classMongoFileOperationUtil {private staticAdvancedDatastore dsForRW; @Autowiredpublic voidsetDatastore(AdvancedDatastore dsForRW) { MongoFileOperationUtil.dsForRW=dsForRW; }} 首先Spring要能扫描到AdvancedDatastore的bean,然后通过setter方法注入; 然后注意:成员变量上不需要再添加@Autowired注解;

java 注入为空_Spring @Autowired 注入为 null相关推荐

  1. JAVA学习(七)__Spring的@Autowired注入规则

    @Autowired 默认是按照byType进行注入的,但是当byType方式找到了多个符合的bean,又是怎么处理的? 经过一些代码的测试,我发现,Autowired默认先按byType,如果发现找 ...

  2. Java 中各种空(''、\u0000、null)的区别?

    在使用下面的SQL查询时,发现去不掉空格,而且把limit 去掉以后空格就没有了,琢磨了很久才发现问题的关键所在.主要是\u0000在作怪!!! select id,company_name,user ...

  3. @Autowired注入、构造器注入、setter注入的使用方式?区别?

    文章目录 三种注入方式的使用 1.@Autowired注入(不推荐) 2.1.构造器注入(推荐) 2.2.构造器注入-lombok升级版(推荐) 3.setter注入 循环依赖问题如何解决? 注入方式 ...

  4. ssh 框架引入service_搭建SSH开发框架时autowired注入为空的问题

    最近在搭建SSH框架,使用@Autowired自动装配时,需要注入的对象是空,表明注入失败. 尝试了很多次还是不行,现在感觉可能是spring没配置好,所以类里的注解写对也注入不进去.但是从log4j ...

  5. java工具类@Autowired注入失败

    失败原因 使用了@PostConstruct 注解 同时java类当中存在构造函数 @PostConstructpublic void init() {autoSSPD = this;}public ...

  6. java应用中spring自动注入_Spring自动注入的几种方式

    ---恢复内容开始--- @Service("accountEmailService") public class AccountEmailServiceImpl implemen ...

  7. java 注入 循环_spring依赖注入——循环依赖

    上一篇博客简单地分析了下依赖注入.但是对于依赖注入的很多细节,都没有深入的分析.这一篇博客会继续分析spring的依赖注入.这篇博客会解决分析getBean缓存时候遗留下来的循环依赖问题. 循环依赖分 ...

  8. SpringDataJPA+Hibernate框架源码剖析(六)@PersistenceContext和@Autowired注入EntityManager的区别

    SpringDataJPA+Hibernate框架源码剖析系列文章: SpringDataJPA+Hibernate框架源码剖析(一)框架介绍 SpringDataJPA+Hibernate框架源码剖 ...

  9. static属性能用@Autowired注入吗?

    本文内容: 1.起因 2.static 3.@Autowired 4.解决方案 先说结论:不能. ||  起因 从某系统交接过来一部分功能的代码,其中包含了一个工具类,该工具类中用到了一个Compon ...

  10. 不能执行autowired_想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做...

    生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...

最新文章

  1. 常见前端数据格式转换
  2. C++编写DLL的方法
  3. 微信公众号开发(—)接口与服务器关联
  4. Cisco IOS Unicast NAT 工作原理 [一]
  5. 容器编排技术 -- Kubernetes kubectl create secret tls 命令详解
  6. java 编译class_.java文件怎样编译成.class文件,你值得一看的技巧
  7. centos 6.5 zabbix 离线安装历程
  8. Codeforces Round #359 (Div. 2) C. Robbers' watch DFS
  9. 【教育知识与能力】人物总结
  10. OSGEARTH三维地形开源项目
  11. 浅析麒麟信安云几大优势之“安全性”篇
  12. 系统分析员到底做什么?
  13. 〖Python〗-- 面向对象编程、继承、组合、接口和抽象类
  14. 电路中IC器件电压符号的解释
  15. 2012年世界500强排行榜(企业名单)
  16. c++新技能不断get中
  17. vue watch首次不触发的解决方案
  18. 五大经典算法之四贪心算法
  19. ROS学习笔记(2)
  20. 当地图遇到微博,生活其实可以这么玩

热门文章

  1. 淘宝中的一些基本CSS代码
  2. 常用的NoSQL数据库
  3. 数据库的使用(SQL)
  4. SQL Server数据库 - 安装教程
  5. java实例化的4种方式
  6. 深入浅出Python闭包
  7. SitePoint播客#115:直播在WordCamp Raleigh第2部分
  8. 基于Python的信用评分卡模型分析(强烈推荐)
  9. Linux教程系列-命令大全
  10. win10+android+手机驱动,win10系统电脑没有手机驱动的解决方法