有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否有@ComponentScan BasePackageClass的命名约定?

Spring的@ComponentScan提供了一个类型安全的^{}属性,这似乎是一件好事,尤其是在我正在处理的项目中,重命名包并不少见。文件上说:

Consider creating a special no-op marker class or interface in each package that serves no purpose other than being referenced by this attribute.

。。。但没有提供关于此类课程名称的进一步指导。我想知道这方面是否有什么惯例package-info.java已经存在于所有包中(由Checkstyle强制执行)——本希望重用它,但遗憾的是Java不允许使用这种名称的类

(如果没有这样的标准,我想可能是PackageInfoBasePackagePackageMarker或类似的标准,但如果有,我更愿意遵循惯例。)


共 (1) 个答案

  1. # 1 楼答案

    目前还没有答案,必须做出决定,因此:

    标记类:

    package com.companyname.appname.projectname.package1name;
    
    /**
     * Empty marker class used to identify this package when using type-safe basePackageClasses in Spring @ComponentScan.
     */
    public class PackageMarker {
        // Empty marker class
    }
    

    用法:

    @ComponentScan(basePackageClasses = {
        com.companyname.appname.projectname.package1name.PackageMarker.class,
        com.companyname.appname.projectname.package2name.PackageMarker.class,
        /* ...etc... */
    })
    

    PackageMarker命名正当性:

    1. 所有这样的类都有相同的名称,这样就可以很容易地识别它们,这似乎是明智的
    2. 从“Package”(与Package info.java的方式相同)开始似乎是明智的
    3. 以“Marker”结尾似乎是明智的,因为文档引用了一个“Marker类”
    4. 选择不包含单词“Base”,这样就不会与基类混淆
    5. 选择不包含“信息”一词,因为它不包含任何信息,如包裹信息。java有
    6. 选择不包含任何其他单词(如“NoOp”),以保持其简洁灵活,用于其他可能的用途

    如果有人能给出在更具探索性的环境中使用的标记类的例子,我仍然很感兴趣