首先想说明的是,@Value @Resource和@Autowire虽然都是用于依赖注入的Annotation,但是二者是有区别的。

1 Resource不依赖于Spring,后者相反,因此为了减少以来,尽量使用Resource;

2 Resource是优先按照变量名称匹配的,也可用@Resource(name="")指定要注入的变量名。Autowire则是优先按类型匹配,配合@Qualifier也可指定变量名。

3 不存在灵异事件!不存在灵异事件!不存在灵异事件!重要的事说三遍。如果出现了NullPointerException,那一定是代码写错了。

当出现被注入的变量被调用时抛出NPE,按照如下的经验排查:

0 Spring的xml配置文件是否都包含在classpath(resources、webapp甚至java都可)中,如果有多个xml文件,include的层次关系是否正确。

1 确定类所在的包是否被Spring扫描到。检查配置文件中是否有:

    <context:annotation-config />
<context:component-scan base-package="me.xxx" />
<context:component-scan base-package="me.yyy" />

2 检查Bean是否有重复定义。

3 对于静态的依赖,要在其setter方法上加@Resource,目的是欺瞒Spring向一个静态变量进行注入。

<bean id="classType" class="....ClassType" />

static ClassType classType;

@Resource
public void setClassType(ClassType classType) {
XXX.cXXXlassType = classType;
}

4 如果是在测试用例中使用@Resource时出现NPE,则考虑是不是Bean根本没有在applicationContext中创建。

可以用下面的方法写测试用例,以避免对大量的字段进行初始化(需要junit 4.9以上的版本):

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/spring-XXX.xml"})
public class BaseTest extends AbstractJUnit4SpringContextTests {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
// add whatever you like.
}
} public class XXXXTest extends BaseTest {...}

当然如果明确地知道单个测试用例只需用到哪些上下文,也可以把这段写在测试用例XXXTest本身,避免每次都要加载整个上下文,导致重量级的用例。

5 如果要检查上下文是否正常创建,或者某个Bean是否在上下文中,可以直接用@Resource调出名为“applicationContext”的全局上下文。

【Java】使用@Value @Reource或@Autowire依赖 (值) 注入时出现NPE的排查方法的更多相关文章

  1. Java Spring学习笔记----Bean的依赖注入(设值注入方式)1

    Spring常用的两种依赖注入方式:一种是设值注入方式,利用Bean的setter方法设置Bean的属性值:另一种是构造注入,通过给Bean的构造方法传递参数来实现Bean的属性赋值: 1.设值注入方 ...

  2. Java自动化测试框架-09 - TestNG之依赖注入篇 (详细教程)

    1.-依赖注入 TestNG支持两种不同类型的依赖项注入:本机(由TestNG本身执行)和外部(由诸如Guice的依赖项注入框架执行). 1.1-本机依赖项注入 TestNG允许您在方法中声明其他参数 ...

  3. 《手把手教你》系列基础篇(七十八)-java+ selenium自动化测试-框架设计基础-TestNG依赖测试- 中篇(详解教程)

    1.简介 上一篇讲解了依赖测试的各种方法,今天继续讲解依赖测试的方法,这一篇主要是讲解和分享通过xml文件配置组名依赖方法( 主要是测试组的用法).废话不说,直接上干货. 2.实例 测试组:一个组可包 ...

  4. Java学习-021-Properties 获取配置项对应的值

    在日常的脚本编写过程中,通常会获取配置文件中的配置项,以执行相应的业务逻辑. 小二上码...若有不足之处,敬请大神指正,不胜感激! 获取配置项值的源码如下所示: /** * Get value fro ...

  5. java 一个函数EnumMap返回多个值

    java 一个函数如何返回多个值   在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值 ...

  6. java中int,float,long,double取值范围,内存泄露

    java中int,float,long,double取值范围是多少? 写道 public class TestOutOfBound { public static void main(String[] ...

  7. Java线程:新特征-有返回值的线程

    http://lavasoft.blog.51cto.com/62575/222082/ Java线程:新特征-有返回值的线程 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 ...

  8. java -- 对Map按键排序、按值排序

                             java  -- 对Map按键.按值排序 1.按键排序(sort by key) 直接上代码  ↓ public Map<String, Str ...

  9. java使用Filter过滤器对Response返回值进行修改

    转:java使用Filter过滤器对Response返回值进行修改 练习时只做了对request 的处理,这里记录一下,filter 对 response的处理. 原文地址:java使用Filter过 ...

随机推荐

  1. SQl性能优化1

    原文发布时间为:2010-11-05 -- 来源于本人的百度文章 [由搬家工具导入] 性能优化,从上面我说的两点来考虑优化,主要是以Sql为主,平台暂不介绍,我们现在使用的数据库以SQL Server ...

  2. duilib入门简明教程 -- VS环境配置(2) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3342030.html     既然是入门教程,那当然得基础点,因为搜索duilib相关资料时,发现有些小伙伴到处都是编译错 ...

  3. manjaro中okular中的pdf文件无法显示中文

    最近发现Manjaro下用Okular打开含有中文的PDF文档时,许多地方显示空白, 开始怀疑是中文字体问题,但是其他的软件中文显示都是正常的. 接着,调整Okular中的中文字体,显示还是不正常. ...

  4. Selenium2+python自动化1(环境安装)

    前言 目前selenium版本已经升级到3.0了,网上的大部分教程是基于2.0写的,所以在学习前先要弄清楚版本号,这点非常重要.本系列依然以selenium2为基础,目前selenium3坑比较多,暂 ...

  5. [SaltStack] Return日志入库审计

    SaltStack日志return审计 在我们执行salt任务时, 默认日志是屏幕打印的, 对于我们审计任务运行情况带来很不方便, 因此我们对日志结果进行了二次开发, 将job日志处理后入库, 方便查 ...

  6. linux 常用命令: runuser

    rpm: coreutils-8.4-9.el6.x86_64 runuser --help 用法:runuser [选项]... [-] [用户 [参数]... ] Change the effec ...

  7. Java IO 学习(三)缓冲IO / 直接IO / 内存映射

    缓冲IO 在介绍缓冲IO之前需要先了解一下常用的机械硬盘的原理与特点 一个机械硬盘中装有多个盘片 每个盘片上有多个同心圆(磁道) 每个同心圆又由多个弧(扇区)组成,每个弧上都记录了等量的数据(比方说5 ...

  8. CSU 1779: 错误的算法【矩阵/模拟】

    Description 有道题目是这样的: 输入一个 n 行 m 列网格,找一个格子,使得它所在的行和列中所有格子的数之和最大.如果答 案不唯一,输出任意解即可.比如,在下面的例子中,最优解是(1,3 ...

  9. Codeforces Round #490 (Div. 3)

    感觉现在\(div3\)的题目也不错啊? 或许是我变辣鸡了吧....... 代码戳这里 A. Mishka and Contes 从两边去掉所有\(≤k\)的数,统计剩余个数即可 B. Reversi ...

  10. 【spring boot logback】日志logback格式解析

    日志logback格式解析 logback官网 格式解析 https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout 官网格式解析有 ...