我的项目中有多个库类,需要将它们注入服务类中。这是 IntegrationFactory 类的错误声明:
考虑在您的配置中定义类型为“ com.ignitionone.service.programmanager.integration.IntegrationFactory”的bean。
几乎每个注入该库类的注入都会出现此错误。
我已经在 @ComponentScan 中添加了Library包,但是由于它是只读文件,因此无法注释该库类。我从这里的一些答案中知道,Spring无法注入它无法管理的类。该库不是在spring上构建的。
我试图创建一个@Bean方法,该方法在使用@Inject的类中返回IntegrationFactory(有问题的类),但这似乎也不起作用。
如何做到这一点,最好不要创建存根/复制类?
这是EngagementServiceImpl类片段:
@Inject
public EngagementServiceImpl(EngagementRepository engagementRepository,
@Lazy IntegrationFactory integrationFactory, TokenRepository tokenRepository,
EngagementPartnerRepository engagementPartnerRepository, MetricsService metricsService) {
this.engagementRepository = engagementRepository;
this.integrationFactory = integrationFactory;
this.tokenRepository = tokenRepository;
this.engagementPartnerRepository = engagementPartnerRepository;
this.metricsService = metricsService;
}
这是注射部分:
@Autowired
private EngagementService engagementService;
这是ConfigClass:
@Configuration
public class ConfigClass {
@Bean
public IntegrationFactory getIntegrationFactory(){
Map<String, Object> globalConfig = new HashMap<>();
return new IntegrationFactory(globalConfig);
}
@Bean
@Primary
public EntityDataStore getEntityDataStore(){
EntityModel entityModel = Models.ENTITY;
return new EntityDataStore(this.dataSource(), entityModel );
}
@ConfigurationProperties(prefix = "datasource.postgres")
@Bean
@Primary
public DataSource dataSource() {
return DataSourceBuilder
.create()
.build();
}
}
答案 0 :(得分:1)
您需要在配置类中添加bean定义。
@Configuration
public class ServiceConfig {
@Bean
public IntegrationFactory getIntegrationFactory(){
// return an IntegrationFactory instance
}
}
然后,您必须确保Spring将@Configuration
类检测到,方法是将其放在扫描路径中,或者通过@Import
手动从扫描路径中的某个位置将其导入。考虑您正在使用Spring Boot的@Import
示例。
@Import(ServiceConfig.class)
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
希望这会有所帮助!
答案 1 :(得分:1)
找不到您的Bean IntegrationFactory
,因为它没有使用任何Spring构造型进行注释,因此无法被组件扫描识别。
由于您有多种选择可以向应用程序上下文提供类的实例,请阅读Spring文档(其中还包括示例)以找出最适合您的一个: https://docs.spring.io/spring/docs/5.1.0.RELEASE/spring-framework-reference/core.html#beans-java-basic-concepts
一个选择是创建一个工厂,该工厂将类的实例提供给应用程序上下文,如文档中所述:
@Configuration
public class AppConfig {
@Bean
public IntegrationFactory myIntegrationFactory() {
return new IntegrationFactory();
}
}
不要忘记将配置添加到应用程序上下文中。