У меня есть пользовательская аннотация, объявленная как Spring Managed Service:Выключите автоматическое связывание для Spring @Service
@Service
public @interface MyServiceAnnotation {
// my service url
String url();
}
The above declaration enables my services to be autowired as Spring Managed beans.
@MyServiceAnnotation(url="/path/serviceLocation")
public class SomeService {
doWork();
}
Однако, есть определенные услуги, которые имеют свои определения боба в качестве applicationContext.xml
. Добавление @MyServiceAnnotation
к таким фасолям делает их включенными как Autowiring, так и встраивает dependecy через XML-файл.
Из-за проблем, связанных с устаревшим кодом, я не хочу удалять определения xml bean и делать их все автоматически.
Итак, есть ли способ, в котором я мог бы отключить автопогрузку в этом случае, и все еще использовать @MyServiceAnnotation
? В идеале я хотел бы иметь аннотацию @Service
на MyServiceAnnotation
, существующие службы по-прежнему будут использовать @MyServiceAnnotation
, но получат их зависимости, введенные на основе xml. Все новые службы будут автоматически отключены без определений компонентов xml.
Одним из возможных подходов является создание NonSpringManagedMyServiceAnnotation
, что и у MyServiceAnnotation
, но без аннотации @Service
. Недостатком этого является то, что мне придется дублировать остальную часть кода от MyServiceAnnotation
, чего я не хочу.
Вы вводите в заблуждение две разные темы - ** autowiring ** не имеет никакого отношения к вашему вопросу. То, что вы хотите, - это запретить ** регистрацию ** bean definition **, выполняемую ** компонентом scan **. –
Мой вопрос состоял в том, чтобы сохранить определение бина и подавить проверку компонентов в одном сценарии и сохранить проверку компонентов в другом ... Фильтр исключений, по-видимому, является разумным решением в этом случае. – user841717