Spring не может инициализировать бин в профиле "dev" - PullRequest
0 голосов
/ 13 сентября 2018

Мой код выдает это исключение:

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'Unknown' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:686)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1210)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1089)
    at core.Main.main(Main.java:38)

Я использую смешанную конфигурацию - на основе XML и аннотаций:

Контекст разработки:

<beans profile="dev">

    <context:component-scan base-package="core"/>
    <context:annotation-config/>

    <import resource="classpath:beans/beans.xml"/>

</beans>

Контекст Beans.xml: содержит другие bean-компоненты, которые инициализированы в XML - там нет аннотаций.

<beans profile="dev,default">
   <bean ...
   <bean ...
</beans>

А вот здесь проблематично Конфигурация (обратите внимание на комментарий ниже):

@Configuration
@Profile({"dev"})
public class MyConfig {

    @Bean(value="Unknown")
    @Description("Bean for unknown user")
    public User getUnknownUser() {
        User user = new User(-1);
        user.setUsername("Unknown");
        return user;
    }
}

Spring правильно инициализирует компоненты, определенные в XML - эти компоненты находятся в профиле default. В профиле dev есть только неизвестный пользователь.

Основной класс:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("dev.xml");
applicationContext.getEnvironment().acceptsProfiles("dev");
User unknown = (User)applicationContext.getBean("Unknown");
LOGGER.info(unknown.toString());

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 13 сентября 2018

Я обнаружил, что мне не хватало этой строки:

    applicationContext.refresh();

Работает сейчас, спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...