2009-07-16 9 views
3

J'ai toujours été assez ennuyé par certaines des applications que je dois maintenant maintenir qui insistent sur l'utilisation de proxy par classe plutôt que par proxy par interface. Plus spécifiquement, j'ai des classes de couche service qui sont mandatées, mais je ne peux pas les rendre finales (même si elles devraient l'être) car pour une raison quelconque quelqu'un a décidé qu'elles devraient être mandatées par la classe réelle et non via l'interface. de ces classes ont des interfaces de toute façon).Quels sont les avantages du proxy par classe par opposition à la transmission par proxy par interface (Spring)?

En plus de ne pas avoir à créer d'interface, y a-t-il une réelle raison d'utiliser un proxy via la classe cible plutôt qu'un proxy basé sur l'interface cible dans la configuration AOP de Spring?

Répondre

4

Seulement si vous voulez vraiment que la classe ne change pas; Le proxisme par interface sera plus puissant car il est plus flexible, mais si vous voulez vraiment verrouiller les choses à une seule implémentation, le fait de passer par la classe serait ce que vous feriez. Je peux imaginer une situation dans laquelle on pourrait vouloir rester dépendant d'une solution de classe propriétaire au lieu de permettre à n'importe quel implémenteur d'interface d'être proxyable, mais cela me semble être un casse-tête; Je suppose généralement d'utiliser l'interface.

+0

Voici ce que je ne comprends pas vraiment à propos de votre réponse. Si vous utilisez un proxy par classe cible, la classe que vous indiquez ne peut pas être rendue définitive. Si, pour une raison ou une autre, vous avez écrit votre code pour vous appuyer sur une implémentation réelle, vous pouvez étendre l'implémentation (en supposant que vous étiez candidat à la substitution par classe cible) et donc ne pas être verrouillé sur une seule implémentation. un seul arbre d'héritage ... – MetroidFan2002

Questions connexes