2014-10-30 8 views
1

У меня есть класс обслуживания, аннотированный аннотацией @Service как класс A, и я реализую BeanFactoryAware в A. Теперь я устанавливаю BeanFactory с помощью метода setBeanFactory. Я пытаюсь загрузить компонент «B» с использованием метода beanFactory.getBean. Теперь в этом случае обязательно указать бит «B» в файле application-context.xml?beanFactory.getBean не загружается bean

ответ

1

Есть 2 способа ..

первого один

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <bean id="b" class="your.package.B" /> 

</beans> 

второго один

Spring будет проверять эту папку и найти боб (аннотированный с @Component, @ Службы, @Repository и т. Д.) И зарегистрировать его

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

    <context:component-scan base-package="your.package" /> 

</beans> 

я предлагаю использовать ..

public class Application implements ApplicationContextAware{ 

    private ApplicationContext applicationContext; 

    @Override 
    public void setApplicationContext(ApplicationContext applicationContext)throws BeansException { 
     this.applicationContext = applicationContext; 
    } 

} 

и метод

B b = applicationContext.getBean("b"); 
1

Если впрыснуть BeanFactory в классе А, а затем попытаться получить боб b с beanFactory.getBean, фасоль bсусло быть объявлен в том же контексте приложения, что и bean a, или в родительском контуре этого приложения.

конкретных случаев использования для стандартного веба-приложения с корневым контекстом приложения и контекста приложения сервлета для DispatcherServlet:

  • если A в этом корневом контексте приложения, Bдолжны быть объявлены в контексте приложения корневого
  • , если A в контексте приложения является сервлет, B могут быть объявлены либо в контексте приложения сервлет или в корне один

Но если единственной причиной этого является использование фасоли B в фасоли A было бы лучше, чтобы непосредственно вводить его вместо BeanFactory (с теми же правилами для contextes применения)

Смежные вопросы