J'ai une annotation personnalisée qui est déclarée en tant que service géré printemps:Désactiver le Autowiring pour le printemps @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();
}
Cependant, il y a certains services qui ont leurs définitions de haricots dans un applicationContext.xml
. L'ajout de @MyServiceAnnotation
à ces beans les rend tous deux Autowiring activés, ainsi qu'injecter dependecy à travers le fichier xml. En raison de problèmes liés au code hérité, je ne veux pas supprimer les définitions de beans xml et les rendre toutes autowired.
Alors, existe-t-il un moyen de désactiver l'autowiring dans ce cas, et d'utiliser @MyServiceAnnotation
? Idéalement je voudrais avoir l'annotation @Service
sur MyServiceAnnotation
, les services existants utiliseraient toujours le @MyServiceAnnotation
mais recevraient leurs dépendances injectées basées sur le xml. Tous les nouveaux services seraient autowired sans les définitions de bean xml.
Une approche possible consiste à créer NonSpringManagedMyServiceAnnotation
identique à MyServiceAnnotation
, mais sans l'annotation @Service
. L'inconvénient de ceci est que je devrais dupliquer le reste du code de MyServiceAnnotation
, ce que je ne veux pas.
Vous confondez deux sujets différents - ** Autowiring ** n'a rien à voir avec votre question. Ce que vous voulez, c'est supprimer ** enregistrement de définition de bean ** fait par ** scannage de composant **. –
Ma question était de garder la définition du bean et de supprimer l'analyse des composants dans un scénario, et de garder l'analyse des composants dans l'autre ... Le filtre d'exclusion semble être une solution raisonnable dans ce cas. – user841717