Внедрение библиотечного класса как зависимости в весеннем проекте - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть несколько библиотечных классов в моем проекте, которые нужно добавить в класс обслуживания.Это заявление об ошибке для IntegrationFactory class:

Рассмотрите возможность определения bean-компонента типа 'com.ignitionone.service.programmanager.integration.IntegrationFactory' в вашей конфигурации.

Эта ошибка возникает почти при каждом внедрении, в которое внедряется этот класс библиотеки.

Я уже добавил пакет библиотеки в @ ComponentScan , но, как он читается-только файл, я не могу комментировать класс библиотеки.Из какого-то ответа я узнал, что Spring не может вводить классы, которыми он не управляет.Эта библиотека не построена на Spring.

Я пытался создать метод @Bean, который возвращает IntegrationFactory (рассматриваемый класс) в классе, где используется @Inject, но это тоже, похоже, не работает.

Как это можно сделать, желательно без создания класса заглушки / копии?

Это фрагмент класса 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();
    }

}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Ваш Бин 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();
    }
}

Не забудьте добавить конфигурацию в контекст приложения.

0 голосов
/ 25 сентября 2018

Вам необходимо добавить определения bean-компонентов в класс конфигурации.

@Configuration
public class ServiceConfig {

    @Bean
    public IntegrationFactory getIntegrationFactory(){
        // return an IntegrationFactory instance
    }

}

Затем вы должны убедиться, что ваш класс @Configuration обнаружен Spring, либо располагая его в отсканированном пути, либовручную импортировать его через @Import откуда-то, где вы отсканировали путь.Пример @Import, учитывая, что вы используете Spring Boot.

@Import(ServiceConfig.class)
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...