Почему в моем веб-приложении Spring + jax-ws есть только одна аннотация @Qualifier? - PullRequest
2 голосов
/ 11 октября 2019

В настоящее время я отлаживаю некоторый код для его оптимизации, и я сталкиваюсь с удивительной ситуацией:

По сути, мы развертываем случайный веб-сервис и внедряем некоторые зависимости (на самом деле, я беру на себя уже разработанныйи работающее приложение, поэтому я все еще выясняю структуру приложения).

Мой вопрос довольно специфичен для одновременного использования Spring AND jax-ws.

У нас есть два класса: интерфейс и реализация этого сервиса, который будет нашим веб-сервисом. Затем мы помещаем две аннотации поверх описания нашего реализующего класса:

@Service("myService") //here we let Spring know that this class is a service called "myService"
@WebService(endPointInterface = "com.mydomain.myService") //we expose this service at the given endpoint

public class MyServiceImplementation implements MyServiceInterface(){

//some code

}

public Interface MyServiceInterface {

//some code

}

Вот моя точка зрения: где-то, реализующий класс объявляет свойство с именем otherService, тип этого свойства - «MyServiceInterface», поэтому в основном этореализует тот же интерфейс, что и MyServiceImplementation:

@Autowired

@Qualifier("myClient")

private MyServiceInterface otherService;

, поэтому, если мы вернем вещи в контекст:

@Service("myService")

@WebService(endPointInterface = "com.mydomain.myService")

public class MyServiceImplementation implements MyServiceInterface(){

    @Autowired
    @Qualifier("myClient")
    private MyServiceInterface otherService;

//some code

}

Если мое понимание пока хорошо: MyService выставляет свою конечную точку на "com.mydomain.myService ", и когда он создается приложением, Spring автоматически ищет класс, связанный с квалификатором" myClient "и реализующий интерфейс MyServiceInterface, чтобы инициировать свойство otherService с экземпляром того же класса (который будетбазовый принцип внедрения зависимостей, верно?)

Итак, следуя этой логике, где-то в моем коде должен быть класс, объявленный так:

@Qualifier("myClient")

public RandomClass implements MyServiceInterface {
}

Но нет, и послев поисках строки "мойКлиент "во всем проекте, единственные подходящие результаты таковы:

< jaxws:client id="myClient" serviceClass="com.mydomain.myService"
        address="some_address" />

, который находится в контексте приложения webApp

Так что я понял, может быть, классификатор ссылаетсядля этого клиента jaxws, но тогда это было бы глупо, поскольку это означало бы, что служба на самом деле пытается «позвонить самому», не так ли?

Если бы вы могли рассказать мне об этом, я был бы очень признателени, надеюсь, это будет полезно и большинству из нас. Спасибо!

1 Ответ

0 голосов
/ 11 октября 2019

весной @qualifier идет вместе с автопроводкой, чтобы сообщить пружине, какие бобы вы хотите автопроводить.

Чтобы определить bean-компонент, соответствующий этому классификатору, вам не нужно использовать аннотацию квалификатора, есть несколько других вариантов:
- определить его идентификатор, как они делают здесь
- если этона основе аннотации, используйте @Bean(name="myClient")

...