Я разрабатываю веб-сервис spring-ws, в котором вызывается веб-служба банка.Весенние вложенные инъекции
Вот моя весна файл конфигурации:
<bean id="PaymentService" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition" lazy-init="true">
<property name="schemaCollection">
<bean class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection">
<property name="inline" value="true" />
<property name="xsds">
<list>
<value>schemas/PaymentServiceOperations.xsd</value>
</list>
</property>
</bean>
</property>
<property name="portTypeName" value="PaymentService" />
<property name="serviceName" value="PaymentService" />
<property name="locationUri" value="/endpoints" />
</bean>
<bean id="bankWebService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
<property name="serviceInterface" value="com.example.stub.PaymentIFBindingSoap" />
<property name="wsdlDocumentUrl" value="https://bank.com/payment.asmx?WSDL" />
<property name="namespaceUri" value="urn:Foo" />
<property name="serviceName" value="PaymentIFBinding" />
<property name="portName" value="PaymentIFBindingSoap" />
</bean>
Первый боб в моей оплаты обслуживания и второй один веб-сервис, клиент потребляя финансовую услугу, предоставляемую моим банком.
Теперь мои сервисные интерфейсы и их реализация:
@Configurable
public class BankService implements IBankService {
@Autowired
private PaymentIFBindingSoap webService;
}
@Service
public class PaymentService implements IPaymentService {
@Autowired
private IBankService bankService;
}
И, наконец, моя собственная служба (PaymentService) конечная точка:
@Endpoint
public class PaymentServiceEndpoint {
@Autowired
private IPaymentService paymentService;
}
Просто, чтобы убедиться, что все ясно, обратите внимание, что моя конечная точка имеет экземпляр «PaymentService» и PaymentService имеет экземпляр «BankService», который сам вводит.
Я понимаю, что все должно работать, как и планировалось, но при попытке развернуть проект в котом я получаю это исключение:
org.springframework.beans.factory.BeanCreationException: Ошибка создания боб с именем ' paymentServiceEndpoint ': отказ от автоматической проводной зависимости не удался; Вложенное исключение - org.springframework.beans.factory.BeanCreationException: Не удалось создать поле autwire: private com.villaparvaneh.services.IPaymentService com.villaparvaneh.services.endpoints.PaymentServiceEndpoint.paymentService; Вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «paymentService»: не удалось выполнить инъекцию автоуведомленных зависимостей; Вложенное исключение - org.springframework.beans.factory.BeanCreationException: Не удалось автополе: private com.villaparvaneh.services.saman.IBankService com.villaparvaneh.services.PaymentService.samanService; Вложенное исключение - это org.springframework.beans.factory.NoSuchBeanDefinitionException: никакой определяющий компонент типа [com.villaparvaneh.services.saman.IBankService] не найден для зависимости: ожидается как минимум 1 компонент, который квалифицируется как кандидат autwire для этой зависимости. Зависимость от аннотаций: {@ org.springframework.beans.factory.annotation.Autowired (обязательно = истина)}
Моя первая догадка, что это не возможно, чтобы иметь вложенные инъекции, как я делал здесь, но я не мог» t найти что-нибудь, поддерживающее его.
Когда ваш bean-компонент '@ Configurable', Spring не будет автоматически вводить его для вас, вам нужно создать экземпляр вручную, например. 'IBankService bankService = new BankService();' –
* Мое первое предположение заключалось в том, что невозможно иметь вложенные инъекции, как я сделал здесь, но я не мог найти ничего, поддерживающего его *, и вы не найдете такую информацию, потому что Spring поддерживает * вложенные инъекции *. –
@LuiggiMendoza Спасибо за ваш ответ. У меня создалось впечатление, что настраиваемые bean-компоненты также будут автоматически введены. Как сказал Патрик ниже, я получил его, изменив Конфигурируемое на сервис. – mdoust