0

这是我的 app.xml :

<context:component-scan base-package="destiny.web" />
<context:annotation-config/>

并且有一个Dao(interface) ,并且DaoImpl(用 注释@Repository) 在命运.web 包中。

还有另一个 Spring3 的命运.web.AppConfig 类:

@Configuration
public class AppConfig
{
  @Inject
  private Dao daoImpl

  public AppConfig()
  {
    System.out.println("dao = " + daoImpl);
  }
}

它打印'null',为什么?

我确信所有这些 bean/配置/存储库都被扫描了。但似乎 @Configuration 不知道其他扫描的 bean 。我错过了什么吗?

我尝试通过 @ImportResource 解决它:

@Configuration
@ImportResource("classpath:app.xml")
public class AppConfig

但它似乎导致循环 bean 扫描并抛出此异常:

{main} org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.
Offending resource: class path resource [app.xml]

如何解决?

谢谢。

4

2 回答 2

2

Spring 将invoke constructor firstly before inject / autowiring其他组件。因此,当您在构造函数中打印时,您的 dao 为空,因为dao still not injected yet.

尝试为您的 configapp 创建测试应用程序。

public class Main {
    public static void main(String[] args) {
        ApplicationContext context =
            new ClassPathXmlApplicationContext("stackoverflow.xml");

        AppConfig appConfig = context.getBean(AppConfig.class);
        appConfig.getConfig("smtp.host");
    }
}
于 2011-04-16T11:21:21.667 回答
0

您是否也使用注释@Autowired而不是尝试过@Inject

于 2011-04-16T08:44:50.933 回答