По умолчанию бины, помеченные @Component
, могут быть разрешены с помощью короткого имени класса с первой буквой в нижнем регистре, например, class x.y.z.Foo -> "foo"
.Если у нас более одного компонента, реализующего один и тот же интерфейс, внедренный компонент должен быть указан с помощью аннотации @Qualifier
, например @Qualifier("foo")
.
Однако при рефакторинге компонент может быть переименован из Foo
в * 1008.* и все ссылки внутри @Qualifier
должны быть соответственно переименованы, с @Qualifier("foo")
до @Qualifier("bar")
, в противном случае мы получим ошибку во время выполнения.
Есть ли способ облегчить поиск таких бинов перед выполнением или, по крайней мере, получить ошибку или предупреждение во время компиляции?
Лучший способ, который я вижу сейчас, - это создать класс реестра и хранить там все имена бинов:
public final class BeanNames {
public static final String FOO = "foo";
...
}
@Component(BeanNames.FOO)
class Foo { ... }
class Baz {
@Autowired
@Qualifier(BeanNames.FOO)
Foo foo;
...