Невозможно найти бин по классу - PullRequest
0 голосов
/ 01 октября 2019

Я определил bean-компонент класса реализации в applicationContext.xml следующим образом:

     <bean id="com.pcmsgroup.v21.databaseId.IDatabaseIDGenerator" 
          class="com.pcmsgroup.v21.infrastructure.databaseid.CacheEnabledDatabaseIdGenerator">
          <constructor-arg ref="dbIdGen" />
     </bean>

И я пытаюсь извлечь это из класса следующим образом:

final DatabaseIdGenerator databaseGenerator = (DatabaseIdGenerator) 
ObjectFactory.getInstance().getInstance(DatabaseIdGenerator.class);

DatabaseIdGenerator это интерфейс CacheEnabledDatabaseIdGenerator

Когда код выполняется, я получаю следующее исключение

org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No bean named 'com.pcmsgroup.v21.infrastructure.databaseid.DatabaseIdGenerator' is defined

Когда я пытаюсь найти бин по имени, он работает нормально:

final DatabaseIdGenerator databaseGenerator = (DatabaseIdGenerator) 
ObjectFactory.getInstance().getInstance("com.pcmsgroup.v21.databaseId.IDatabaseIDGenerator");

Я хочу получить bean от .class, потому что выборка кода находится в другом хранилище, и я не хочу изменять этот код. Есть идеи?

1 Ответ

0 голосов
/ 01 октября 2019

Мне удалось решить эту проблему, изменив идентификатор bean-компонента на:

id="com.pcmsgroup.v21.infrastructure.databaseid.DatabaseIdGenerator"

Проблема заключалась в том, что bean-компонент выбирался по его имени, и он назначал имя пакета интерфейса для id для bean-компонента CacheEnabledDatabaseIdGenerator

Я нашел это отладкой следующего метода: org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition

...