2016-12-07 2 views
0

je besoin de quelque chose comme:Comment puis-je nommer @Service avec plusieurs noms au printemps?

@Named({"bean1", "bean2"}) 

@Service({"bean1", "bean2"}) 

quelqu'un peut me aider?

+0

Pourquoi avez-vous besoin de cela? –

+0

A avoir trois produits dans le même groupe. J'ai juste besoin d'un service pour le groupe mais je reçois le code du produit. La mise en place d'un service suffit donc à mes produits. J'utilise getBean (productId) alors j'ai besoin de plusieurs noms. – Lucas

+1

Quelqu'un pourrait-il expliquer pourquoi voter vers le bas? Les gens ne veulent même pas expliquer et juste en bas ... – Lucas

Répondre

3

Pas directement, comme vous l'avez. Mais il est possible en redéfinissant un @Service existant (ou @Component) comme un @Bean avec un nom ou une liste de noms, c'est possible.

@Service("Service-A") 
public class SampleService { 
    public String doSomething() { return "Foo"; } 
} 

@Configuration 
public class SampleConfig { 

    @Bean(name = {"Service-B", "Service-C"}) 
    public SampleService createMirroredService(@Autowired SampleService service) { 
     return service; 
    } 
} 

Et maintenant, vous avez trois cas de SampleService: Service-A (votre @Service), Service-B et Service-C. Cela fonctionne parce que vous en définissez un et que la méthode annotée @Bean passe à travers l'implémentation, ce qui a pour effet de créer des alias. Assurez-vous que la classe de configuration est sélectionnée dans l'analyse et que cela fonctionne correctement.

Remarque: Bien que cela fonctionne, et il existe probablement d'autres solutions, je ne peux pas penser à un cas où j'aurais besoin de cela. Peut-être que si je m'intègre à une bibliothèque qui existe déjà, je ne peux pas changer. Mais il ne me semble pas un besoin sérieux pour cela, ou ils auraient fait value sur @Component un tableau.

+1

J'ai besoin de cela pour un cas d'utilisation spécifique !!! Merci beaucoup mec... – Lucas