我在 Spring MVC控制器中使用Spring AOP,因此间接地使用cglib.由于cglib需要一个默认构造函数,所以我包括一个,我的控制器现在看起来像这样:
@Controller
public class ExampleController {

    private final ExampleService exampleService;

    public ExampleController(){
        this.exampleService = null;
    }

    @Autowired
    public ExampleController(ExampleService exampleService){
        this.exampleService = exampleService;
    }

    @Transactional
    @ResponseBody
    @RequestMapping(value = "/example/foo")
    public ExampleResponse profilePicture(){
        return this.exampleService.foo(); // IntelliJ reports potential NPE here
    }
}

现在的问题是,IntelliJ IDEA的静态代码分析报告了潜在的NullPointerException,因为this.exampleService可能为null.

我的问题是:

如何防止这些假阳性空指针警告?一个解决方案是添加assert this.exampleService!= null或者可能使用Guava的Preconditions.checkNotNull(this.exampleService).

但是,必须将此功能添加到此方法中使用的每个字段的每个方法中.我宁愿在一个地方添加一个解决方案.可能是默认构造函数或某事的注释?

编辑:

似乎要用Spring 4修复,但是我正在使用Spring 3:
http://blog.codeleak.pl/2014/07/spring-4-cglib-based-proxy-classes-with-no-default-ctor.html

解决方法

您可以注释您的字段(如果您确定它真的不为null)与:
//import org.jetbrains.annotations.NotNull;
@NotNull
private final ExampleService exampleService;

这将指示Idea在所有情况下假定此字段不为null.在这种情况下,您的真实构造函数也将被Idea自动注释:

public ExampleController(@NotNull ExampleService exampleService){
    this.exampleService = exampleService;
}

java – 如何防止假阳性空指针警告,当使用CGLIB / Spring AOP?的更多相关文章

  1. html5利用canvas实现颜色容差抠图功能

    这篇文章主要介绍了html5利用canvas实现颜色容差抠图功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. ios – Swift指针算术和解除引用;将一些类似C的地图代码转换为Swift

    我有一点似乎没有工作的Swift代码……解决方法您正在指定locationPointer指向新位置,但仍在下一行中使用ptr,并且ptr的值尚未更改.将您的最后一行更改为:或者你可以改变指向var的指针并推进它:

  3. ios – 如何防止Parse保存PFObject儿童?

    我正面临着Parse和iOS的一个非常普遍的问题.我有一个类POST,具有以下结构:>text(String)>图像(PFFile)>LikesUsers(StringofString)>LikesCount(Int)>从(发布到用户的指针)如果用户(已登录)喜欢帖子.我只是递增喜欢并将用户的Objectid添加到数组中例如:User-2喜欢User-1的帖子.问题在这里.我不能保存PostObj

  4. ios – 为什么对象有指针而不是int?

    当我们创建一个int时,我们输入:我们为什么不打字?问题是,为什么我们需要一个指向对象的指针而不是int,float等…解决方法效率.将int从一个地方移动到另一个地方很容易.移动对象需要cpu的更多工作.移动对象的地址就像移动int一样简单.在普通的C中,出于同样的原因,通常会处理指向结构的指针.使用–>C可以轻松实现操作符.

  5. Xcode C开发,需要澄清

    我非常喜欢Xcode提供对该语言可能的成员函数的深入了解的方式,并且更喜欢相对于文本伙伴使用它,如果不是因为我今天注意到的奇怪.当strings=“Teststring”时;唯一可用的substr签名如图所示但据我所知,签名应该是什么iseeonline确实s.substr(1,2);既被理解也适用于Xcode.当我尝试方法完成时为什么不显示?

  6. ios – 如何使用双指针声明NSString的变量

    我想使用双指针,我试图像这样声明.但是,Xcode向我展示了错误“指向非const类型’Nsstring*’的指针,没有明确的所有权”并且无法编译.最后我想这样做.请告诉我任何建议.解决方法更改为此以便您可以明确指定所有权:输出:在__strong上Hereisthedocumentation.

  7. xamarin.ios – 没有找到ViewController ::.ctor(System.IntPtr)的构造函数

    我有一个问题,我的Monotouch应用程序有时在收到内存警告后才会崩溃.请参见下面的堆栈跟踪.堆栈跟踪是正确的,因为指定的类缺少构造函数获取IntPtr参数.但是这是有意的,因为我在应用程序中根本不使用InterfaceBuilder.那为什么会这样呢?

  8. ios – 将指针字段添加到PFUser的子类

    我想添加一个指针字段到我的PFUser子类,由PFUser子类管理.理想情况下,指针对象将在PFUser子类上自动使用–在保存和提取用户时保存并提取指针对象.使用任何其他PFObject子类,我只需添加一个Dynamic属性,并在查询时确保使用includeKey.但是,对于PFUser子类,我从来没有实际查询.如何强制指针对象获取?

  9. ios – 在Objective-C中使用NSLog时,引导指针

    好的,从这个代码,我知道现在是一个指向NSDate对象的指针,但是在第3行的代码中,你如何取消引用没有星号的指针?

  10. ios – Xcode – 我的应用程序崩溃,错误是“无效指针从空闲列表中排队***在malloc_error_break中设置一个断点来调试”

    我的应用程序在模拟器上运行完美.但是当我在设备上运行它时,应用程序崩溃和显示错误:“malloc:*errorforobject0x17415d0c0:Invalidpointerdequeuedfromfreelist*setabreakpointinmalloc_error_breaktodebug”;我在malloc_error_break中搜索并设置了一个断点来进行调试,但仍然找不到问题.

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部