2017-02-26 3 views
1

Voici un exemple de la façon dont vous pouvez définir un aspect utilisant des annotations:Comment définir un aspect intérieur config ressort à l'aide de la configuration java ne

@Aspect 
public class BlaBla() { 
    @Pointcut(...) 
    ... 

    @Before(...) 
    ... 

    @After(...) 
    ... 
} 

Ceci est la seule façon que j'ai trouvé par la recherche. Cependant je veux que la classe BlaBla ne soit pas polluée avec des annotations et des méthodes pointcut. Je veux qu'il reste un POJO. Si je devais utiliser la configuration de printemps xml, je pouvais le faire facilement:

<bean id="blaBla" class="BlaBla">...</bean> 

<aop:config> 
    <aop:aspect ref="blaBla"> 
     <aop:pointcut .../> 
     <aop:before .../> 
     <aop:after .../> 
    </aop:aspect> 
</aop:config> 

Cependant, je ne suis pas en utilisant la configuration XML, mais une configuration Java à la place. Fondamentalement la question est, comment puis-je dire au printemps que la classe BlaBla est un aspect sans changer la classe BlaBla elle-même, mais plutôt de le définir dans une classe java annotée avec @Configuration annotation de printemps.

+0

Le principe de l'AOP ist à modulariser une préoccupation transversale - appelé un aspect - dans un endroit comme vous modularisation une préoccupation centrale dans une classe. Pourquoi voulez-vous le déchirer du tout? Je n'ai jamais compris cette approche. Votre premier exemple de code dit tout: "Ceci est un aspect BlaBla, contenant les pointcuts et les conseils suivants, etc." Ce que vous voulez n'a tout simplement pas de sens IMO. Conserver des aspects liés à l'aspect dans un aspect, pas séparément de celui-ci. Pourquoi chercher à deux endroits en essayant de comprendre la logique de l'aspect? – kriegaex

+0

Parce que BlaBla est aussi un haricot. Je pourrais théoriquement vouloir l'utiliser comme aspect pour un ensemble d'interfaces et en même temps l'injecter dans une autre classe et l'utiliser d'une manière différente. Dans ce cas, je ne voudrais pas que mon bean ait une méthode pointcut publique parce qu'elle ne fait pas partie de ce que cet objet est au sens commercial. Cela semble aussi plus découplé pour moi personnellement. Comme si je serais plus en sécurité. Et si plus tard, je décidais d'utiliser BlaBla de manière non-aop. Dans ce cas, je voudrais juste supprimer les configurations et ne pas le toucher du tout. –

+0

Je n'achète pas vos arguments, mais bonne chance à vous de toute façon. – kriegaex

Répondre

0

Vous devez créer une autre classe BlaBlaAopConfig ou quelque chose comme ça qui sera votre classe de configuration.

Java config n'est pas différent de xml, vous devez le définir et vous devriez le faire séparément de votre code. Seule différence que vous obtenez, tout en utilisant java config sur xml est meilleure (ou pire selon les préférences personnelles) la clarté. Mais vous ne voulez jamais mélanger le code aop et pojo dans une classe.

Vous définirez dans @Pointcut votre classe cible BlaBla

+0

Je comprends cela, mais dans ce cas BlaBlaAopConfig devient l'aspect de lui-même? C'est donc un aspect qui délègue les méthodes avant et après à un bean de BlaBla. N'est-ce pas différent de faire l'aspect de BlaBla? En d'autres termes, dans l'exemple xml que j'ai fourni, BlaBla est un aspect. L'exemple que vous fournissez fait de BlaBlaAopConfig un aspect qui délègue à BlaBla qui est un pojo. Ce que je voulais, c'est un code équivalent à la config xml d'une manière que je veux déclarer dans SpringConfig.java le fait que BlaBla soit un aspect. Mais en même temps de ne pas toucher la classe BlaBla et de la laisser comme POJO. –

+0

Eh bien, cela n'a aucun sens. BlaBla est POJO et ça ne devrait pas être un aspect en soi. Code équivalent de xml est exactement ma solution. En XML, vous avez juste référence à l'objet que vous feriez dans @Pointcut dans BlaBlaAopConfig. Vous avez deux ** tags xml séparés, un pour bean one pour aop et java config est juste un moyen d'écrire config en java donc vous avez besoin exactement la même chose! – mklimasz

+0

Après quelques réflexions, j'ai réalisé que je suis trop stricte à ce sujet. Tu as raison. –