Не удалось передать значение @bean другому классу через Autowiring

Я новичок в весне. Так что я не мог понять, какая проблема есть в приведенном ниже коде. У меня есть два класса. Я определяю канал @Bean и автоматически подключаю этот компонент в следующем классе. Я использую аннотацию для автопроводки. Когда я пытаюсь " System.out.println(externalChannel.toString());" Я получаю нулевые значения и исключение пустого указателя исключение.

@Configuration
public class MessagingConfig
{
    @Value("${service.name}")
    private String queueName; // NOSONAR

    @Value("${${user}")
    private String schema; 

    @Value("${Owner}")
    private String owner;

    @Bean
    public Channel externalChannel()
    {
        EventsProvider eventsProvider = new EventsProvider();
        eventsProvider.setOwner(owner);
        System.out.println("-------Cost And Events Channel-------"+eventsProvider.getEventsChannel());
        return eventsProvider.getEventsChannel();
    }    
}

И еще один класс

@Component
@LoggedService
@Monitored(useActualType = true)
public class MessagePublish {

    @Autowired
    private MessagingService messageService;

    @Autowired
    private Channel externalChannel;

    public void publishTPSMessage(SourceTransaction sourceTransaction)
    {
        TPSEvent event = new TPSEvent(ContextHolder.getContextId(), new Date(), GuidUtils.generateGuid(),sourceTransaction);
        Message<TPSEvent> message = new Message<TPSEvent>(event);

        message.getHeader().setMessageType(TPSEvent.class.getName());
        message.getHeader().setPayloadEncodingType(SystemCodecs.XML.name());
        System.out.println(message.toString());

        System.out.println(externalChannel.toString());
        messageService.publish(externalChannel, message);
    }
}

Больше информации

public Channel getEventsChannel() {
        return Channel.builder()
        .setName("necessarySources")
        .setConnectionName("defaultConnection")
        .setType(ChannelType.Topic)
        .setConnectionData(AqSqlConnectionData.buildString(this.owner, "Safi"))
        .setSubscriberNames(new String[]{"Safi_Autowire"})
        .build();
    }

Основной класс

public class TPSHandler {
    public static void main(String[] args) {
        BatchExport batchExportBean=getBatchExportASJAXBElement();
        System.out.println(" batchExportBean Trans Description : " + batchExportBean.getDueDate());
        for(Pay pay :batchExportBean.getPay()) {
            SourceTransaction sourceTransaction=mapPayBatchToSourceTransaction(pay,batchExportBean);
            String sourceTraString = getSourceTransactionASXML(sourceTransaction);
            System.out.println(" sourceTraString : \n" + sourceTraString);
            MessagePublish messagePublish= new MessagePublish();
            //SourceTransaction sourceTransaction= new SourceTransaction();
            messagePublish.publishTPSMessage(sourceTransaction);
        }
    }   
}

Мой сервлет.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
       xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://cxf.apache.org/jaxws
       http://cxf.apache.org/schemas/jaxws.xsd
       http://cxf.apache.org/jaxrs
       http://cxf.apache.org/schemas/jaxrs.xsd">

    <import resource="classpath:config-properties.xml" />
    <import resource="classpath:datasource.xml" />
    <import resource="classpath:transaction-manager.xml" />
    <import resource="classpath:jmx.xml" />

    <context:component-scan base-package="com.imosAdapter" />
    <bean class="com.oasis.services.messaging.config.MessagingServicesConfig" />
    <bean class="com.oasis.services.messaging.config.DefaultMessagingConnectorsConfig" />
    <bean class="com.oasis.services.messaging.config.LoaderConfig" />
    <context:annotation-config />
    <bean
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
            <value>/config/oasis-component.properties</value>
        </property>
    </bean>
</beans>

Исключение:

Exception in thread "main" java.lang.NullPointerException
at com.imosAdapter.tps.events.MessagePublish.publishTPSMessage(MessagePublish.java:46)
at com.imosAdapter.tps.TPSHandler.main(TPSHandler.java:64)

В чем проблема здесь? Кто-нибудь может мне помочь с этим? что именно мне здесь не хватает?

1 ответ

Вам необходимо инициализировать контекст Spring в начале вашего приложения, когда вы не создаете сервлет / не запускаете как сервер.

См. Использование Spring в автономном приложении.

Другие вопросы по тегам