当前位置: 首页 > 知识库问答 >
问题:

如何使用checkstyle或PMD强制构造函数注入?

钱锐
2023-03-14

我想在GWT项目中强制执行构造函数注入,使用Guice注释com.google.inject.Inject,它可以放在字段注入和构造函数注入的构造函数上。

该项目已经使用了检查风格和PMD。

我可以简单地通过禁止字段上的注释来强制构造函数注入,但是我找不到检查风格模块或PMD规则来做到这一点。我肯定我错过了一些东西,因为它似乎是静态代码分析工具的日常任务。

共有1个答案

计和顺
2023-03-14

这听起来像是Checkstyle的MatchXpath检查的好候选人。您可以像这样在配置中添加两个模块:

<module name="MatchXpath">
  <property name="query" value="//VARIABLE_DEF/MODIFIERS/ANNOTATION/IDENT[@text='Inject']"/>
  <message key="matchxpath.match"
                     value="Inject annotation only allowed on constructors."/>
</module>

<module name="MatchXpath">
  <property name="query" value="//METHOD_DEF/MODIFIERS/ANNOTATION[./IDENT[@text='Inject']]"/>
  <message key="matchxpath.match"
                     value="Inject annotation only allowed on constructors."/>
</module>

java文件示例

public class Communication {
    @Inject @Named("SMSComms")
    CommunicationMode smsComms;

    @Inject
    public void setEmailCommunicator(@Named("EmailComms") CommunicationMode emailComms) {
        this.emailComms = emailComms;
    }

    @Inject
    public Communication(@Named("IMComms") CommunicationMode imComms) {
        this.imComms = imComms;
    }
}

结果:


➜  src java -jar checkstyle-8.40-all.jar -c config.xml Communication.java
Starting audit...
[ERROR] src/Communication.java:2:6: Inject annotation only allowed on constructors. [MatchXpath]
[ERROR] src/Communication.java:5:5: Inject annotation only allowed on constructors. [MatchXpath]
Audit done.
Checkstyle ends with 2 errors.

 类似资料:
  • 问题内容: 我正在使用Gson对此类进行序列化和反序列化。今天,我不得不在此对象中添加最终的UUID。我没有序列化的问题。我需要强制gson 在反序列化时使用构造函数。我该如何实现? 问题答案: 您可以实现一个自定义的JsonDeserializer并将其注册到GSON。 请记住,此代码尚未经过测试。

  • 问题内容: 我的spring bean具有一个带有唯一强制性参数的构造函数,我设法用xml配置对其进行了初始化: 然后,我像这样使用此bean,并且效果很好。 但是我想用注释指定contructor arg值,例如 这可能吗 ? 提前致谢 问题答案: 首先,必须在bean定义中而不是在注入点中指定构造函数arg。然后,你可以利用spring的注释(spring 3.0) 就我所看到的问题而言,这可

  • 我有一个接口,它在两个地方定义如下: 我的客户端实现类没有任何注释,只有必需的构造函数。在这种情况下,如何限定正确的接口实现用法?我不想使用,因为在我的例子中,将其中一个用法命名为primary在语义上是不正确的(它们在某种意义上是相等的)。我需要用相同的实现类传递相同的接口,但针对受尊敬的客户机的特定用例进行了不同的配置。我想命名一个参数就足够了,通过这个参数我将实现注入到bean创建方法中,但

  • 问题内容: 我们正在将静态分析工具引入Java产品的构建系统中。我们正在使用Maven2,因此Checkstyle和PMD集成是免费提供的。但是,就执行基本样式规则而言,这两个工具之间似乎在功能上有很大的重叠。 同时使用这两者有好处吗?如果一个工具可以工作,我不想维护两个工具。如果选择一种,应该使用哪一种,为什么? 我们还计划使用FindBugs。还有其他静态分析工具值得我们关注吗? 更新: 共识

  • 我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。

  • 问题内容: 我有一个带有构造函数注入的控制器 这是一个简单的类,可以正常工作。但是,当我尝试使用下面的类运行JUnit测试时,出现错误。 错误是: 上面的错误消息使我感到困惑,我该如何使用零参数构造函数注入userMapper?我知道可以在MainController中为userMapper添加@Autowired,但是不建议使用字段注入。请有人指导我一种用于构造函数注入和MockMvc测试的合适