2014-10-30 74 views
1

我有一個服務類註解@Service註釋作爲類A,我在A中實現BeanFactoryAware現在我使用setBeanFactory方法設置BeanFactory。我正嘗試使用beanFactory.getBean方法加載一個bean「B」。現在在這種情況下,是否必須在application-context.xml文件中定義「B」bean?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> 

第二個

春天會掃描該文件夾並找出豆(與@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

如果在A級注入BeanFactory,然後嘗試用beanFactory.getBean讓豆b,豆b必須在與bean a相同的應用程序上下文中聲明,或者在此應用程序上下文的父級中聲明。

具體使用情況與根應用上下文一個標準的Web應用程序和一個servlet應用程序上下文的DispatcherServlet

  • 如果A的是根應用上下文,B必須將在根應用程序上下文中聲明
  • 如果A中是servlet應用上下文,B既可以在servlet應用上下文或在根聲明一個

但如果唯一的原因是在豆A用豆B倒不如直接注入它,而不是BeanFactory(用於應用程序contextes具有相同的規則)