自动装配和注入bean的外部Java库问题

时间:2017-04-07 10:01:11

标签: spring maven javabeans

我创建了一个由Maven管理的Spring Boot应用程序。 我正在从我们的Maven存储库中检索公司的库。

在这个图书馆,我们有一个服务界面,没有注明' @ Service':

public interface MyService {
   //...
}

此服务只有一个实现:

public class DefaultMyService implements MyService {
   //...
}

此库上下文以旧的Spring方式(在applicationContext.xml文件中)进行管理。 我通常认为,如果范围内只有一个,Spring Boot能够找到实现。

当我尝试运行" spring-boot:run"在我的项目中,它将失败并出现以下错误:

  

没有符合条件的bean' com.pharmagest.saml.SAMLService'   可用:预计至少有1个符合autowire资格的bean   候选人。依赖注释:   {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}

我试过了:

  1. 在配置类上添加@ComponentScan,包括错误的包:@ComponentScan(basePackages={"com.mycompany.web", "com.mycompany.thelibrary.client.*", "com.mycompany.thelibrary.services.*"})
  2. 在applicationContext.xml中添加bean定义(如果我添加接口,它告诉我它可以定义它,因此我听说如果只有一个,Spring可以找到默认实现吗?)
  3. 在"运行时"添加库在项目选项中
  4. 将库作为外部资源添加,而不是通过maven
  5. 在所有情况下,我只能构建maven但不能运行该项目。 你有什么建议来帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:3)

  1. 由于DefaultMyService没有@Component(或@Service)注释将无法被检测到,因此无法工作。
  2. Bean定义必须是具体实例,因此请使用DefaultMyService而不是接口。对于你的理解错误,Spring不会检测到任何错误
  3. 和4.不会更改任何东西只添加依赖项而没有正确的1.或2.将不执行任何操作。
  4. 只需在配置中添加@Bean

    即可
    @Bean
    public DefaultMyService myService() {
        return new DefaultMyService();
    }
    

    或者导入其他库applicatiponContext.xml,这是你应该做的。

    @ImportResource("classpath:/applicationContext.xml")
    

    @SpringBootApplication旁边添加此内容。