在项目外部完成Spring初始化

时间:2017-08-21 18:54:44

标签: spring maven spring-mvc

我有一个java spring项目。我看到初始化spring项目的一种方法是在main方法中使用这个代码。

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
        ctx.register(Config.class);
        ctx.scan("com.example.db.app");
        ctx.refresh();

是否可以将其保留在主方法之外,然后制作一个这个项目的jar。将它作为依赖项添加到其他项目的pom.xml中,并调用从那里初始化spring工件的方法。

我试过这样做。我收到了一个错误。

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'itemInformationRepositoryService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.example.db.app.service.ItemInformationRepositoryService.setItemInformationRepositoryService(com.example.db.app.repository.ItemInformationRepository); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.example.db.app.repository.ItemInformationRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

1 个答案:

答案 0 :(得分:0)

异常消息说明:

  

找不到[com.example.db.app.repository.ItemInformationRepository]类型的限定bean用于依赖:期望至少有一个bean符合此依赖关系的autowire候选者。

这意味着类com.example.db.app.repository.ItemInformationRepository不在Spring上下文中。也许你期望Spring发现这个类是因为你指示Spring扫描com.example.db.app?根据Javadocs AnnotationConfigApplicationContext.scan() ...

  

在指定的基础包中执行扫描。

     

@param basePackages包以检查带注释的类

因此,为了让Spring发现com.example.db.app.repository.ItemInformationRepository,您必须:

  • 使用org.springframework.stereotype.Component对其进行注释,以便scan()
  • 发现它
  • 以与注册Config.class相同的方式注册,例如ctx.register(ItemInformationRepository.class);