2017-04-07 86 views
1

我创建了由Maven管理的Spring Boot应用程序。 我正在从我们的Maven存储库中检索公司的库。自动装配和注入Bean的外部Java库问题

在这个库中,我们有一个服务接口,而不是被标注了“@服务”:

public interface MyService { 
    //... 
} 

此服务只有一个执行:

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

这个库上下文管理的旧的Spring方法(在applicationContext.xml文件中)。 我读到通常情况下,如果在范围中只有一个,Spring Boot能够找到实现。

当我尝试运行“春天启动:运行”在我的项目,它会失败,出现以下错误:

无型“com.pharmagest.saml.SAMLService” 可用的排位豆:预计至少有1个豆符合自动电线 候选人的要求。依赖注解: {@ 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定义(如果我添加的接口它告诉我,它可以定义它,因此,我听说春天可以找到默认的实现如果只有一个?)
  3. 在“运行”中添加库时间”,在项目的选择
  4. 为了不通过行家

库中添加外部资源在所有的情况下,我只可以Maven构建,但不能运行项目。 你有什么建议可以帮助我吗?谢谢!

+0

对于选项2,您可以在applicationContext.xml中显示您的定义吗? –

+0

难道你不能手动创建bean并将该方法标记为@Bean来返回实例吗? – StanislavL

回答

3
  1. 将无法​​正常工作的DefaultMyService没有@Component(或@Service)注释不会被检测到。
  2. Bean定义必须是具体实例,所以使用DefaultMyService而不是接口。春天不会检测到任何东西你的理解是错误的
  3. 和4.不会改变任何东西只会添加依赖没有正确的1.或2.什么都不会做。

只需添加一个@Bean到您的配置

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

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

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

将此添加到@SpringBootApplication旁边。

+0

嗨,我做到了。我导入了applicationContext.xml文件:(我无法获得库的源代码,我不得不使用它,所以我不能添加“@service”或@Bean – Alex

+0

为什么不能你可以添加'@ Bean',我可以把'@ ImportResource'添加到一个类中,你可以添加一个'@ Bean'到同一个类 –

+0

噢对不起我虽然你问我添加@豆服务本身我的不好 – Alex