@ComponentScan basePackageClasses 是否有命名约定?[已关闭]

Spring的@ComponentScan提供了一个类型安全的basePackageClasses属性 - 似乎是一个好东西,特别是因为在我正在从事的项目中重命名包并不罕见。文档说:

请考虑在每个包中创建一个特殊的无操作标记类或接口,该类或接口除了被此属性引用外没有任何用途。

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

(如果不存在这样的标准,我想也许是,或类似的,但如果有的话,宁愿遵循约定。PackageInfoBasePackagePackageMarker


答案 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... */
})

程序包标记命名理由:

  1. 对于所有此类类具有相同的名称似乎很明智,因此可以轻松识别它们。
  2. 它似乎以“Package”开头(与package-info.java相同)。
  3. 以“Marker”结尾似乎是明智的,因为文档指的是“标记类”。
  4. 选择不包括单词“Base”,因此它不会与基类混淆。
  5. 选择不包括“信息”这个词,因为它不包含任何像包信息这样的信息.java。
  6. 选择不包括任何其他单词(例如“NoOp”),以保持其在其他可能用途中的敏捷性和灵活性。

如果有人能给出在更具开拓性的上下文中使用的标记类的示例,仍然会感兴趣......


答案 2

推荐