Spring Integration @Autowired не работает - PullRequest
0 голосов
/ 05 декабря 2018

Я использую @Autowired, чтобы создать Бин.Но я получаю NullPointer, а Бин не создается.

Spprinng Stater

@ComponentScan("com.api")
public class DoseManagementApplication {

public static void main(String[] args) {
    SpringApplication.run(DoseManagementApplication.class, args);
    AbstractApplicationContext context = new ClassPathXmlApplicationContext("/integration.xml");
    DoseManager doseManager = (DoseManager) context.getBean(DoseManager.class);

    doseManager.doseMangement("");

    context.close();

}

}

Integration.xml

<int:gateway id="doseManager" service-interface="com.cerner.api.gateway.DoseManager"/>

<int:channel id="requestChannnel"></int:channel>

<int:service-activator ref="doseManagerServiceActivator" input-channel="requestChannnel" method="buildDoseMedRelation"> 
</int:service-activator>
<bean id="doseManagerServiceActivator" class="com.cerner.api.activator.DoseManagerServiceActivator"></bean>

DoseManagerИнтерфейс

package com.api.service;    
@Component
public interface DoseManager {

@Gateway(requestChannel="requestChannnel")
public void doseMangement(String startMsg);
}

Класс активации службы

package com.api.service;
@Component
public class DoseManagerServiceActivator {

@Autowired
private DoseManagerService doseManage;

public void buildDoseMedRelation(Message<?> msg) {
    System.out.println("doseManage== "+doseManage);
}
}

Класс обслуживания

package com.api.service;
@Service
public class DoseManagerService {

}

Я пытаюсь выяснить, почему не работает @Autowired.но не добился успеха.Сервис класса нет ничего.

1 Ответ

0 голосов
/ 05 декабря 2018

Ваша проблема в том, что вы используете обычный new ClassPathXmlApplicationContext("/integration.xml");, но не тот, который поддерживает аннотации.

Непонятно, зачем вы вообще создаете новый контекст приложения, так как похоже, что вы находитесь в Spring Boot, потому что вы, что SpringApplication.run(DoseManagementApplication.class, args);.Отсюда ваша интеграционная конфигурация загружается в отдельный ClassPathXmlApplicationContext и полностью не видна для Spring Boot.

Я бы предложил вам использовать @SpringBootApplication на вашем DoseManagementApplication вместе с @ImportResource("classpath:/integration.xml") изатем позвоните getBean() (если вам нужно) из ApplicationContext context = SpringApplication.run(DoseManagementApplication.class, args); и вообще не используйте ClassPathXmlApplicationContext.

...