Подтвердить что ты не робот

Есть ли соглашение об именах для @ComponentScan basePackageClasses?

Spring @ComponentScan предлагает тип безопасного basePackageClasses атрибута - кажется, хорошо использовать, особенно, поскольку это не редкость для переименования пакетов по проекту, над которым я работаю. В документации указано:

Подумайте о создании в каждом пакете специального класса или интерфейса маркера no-op, который не имеет никакой цели, кроме ссылки на этот атрибут.

... но не предлагает дальнейших указаний по названию такого класса. Интересно, существуют ли какие-либо соглашения вокруг этого. package-info.java уже существует во всех пакетах (как предусмотрено Checkstyle) - предпочел бы повторно использовать это, но, к сожалению, Java не разрешает класс этого имени.

(Если таких стандартов не существует, думаю, возможно, PackageInfo, BasePackage, PackageMarker или подобных, но предпочтет следовать соглашению, если оно есть.)

4b9b3361

Ответ 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 Обозначение именования:

  • Кажется разумным, чтобы все такие классы имели одно и то же имя, чтобы их можно было легко идентифицировать.
  • Кажется разумным, чтобы он начинался с "Пакета" (точно так же, как package-info.java).
  • Кажется разумным, чтобы он заканчивался "Маркером", поскольку документация относится к "классу маркеров".
  • Не рекомендуется включать слово Base, поэтому его не путать с базовыми классами.
  • Не хотел включать слово "Информация", поскольку он не содержит никакой информации, такой как package-info.java.
  • Не рекомендуется включать какие-либо другие слова (например, "NoOp" ), чтобы они были быстрыми и гибкими для других возможных применений.

Было бы интересно, если кто-нибудь сможет привести примеры классов маркеров, используемых в более прозрачном контексте...