Maison  >  Article  >  Java  >  Apprentissage du cadre de printemps (6) AOP

Apprentissage du cadre de printemps (6) AOP

黄舟
黄舟original
2016-12-29 13:21:021349parcourir

La programmation orientée aspect AOP (Aspect-Oriented Programming) est complètement différente de la POO. En utilisant l'AOP, le système de programmation est divisé en aspects ou préoccupations, plutôt qu'en objets dans la POO.

Introduction de l'AOP

Dans l'utilisation de la POO orientée objet, la duplication de code est inévitable, et en utilisant la programmation orientée objet, cette duplication ne peut pas éviter, par exemple, lors du jugement des autorisations des utilisateurs, exécutez la méthode correspondante en fonction des autorisations correspondantes ; lors de la définition du format d'encodage dans le servlet, le même code apparaît plusieurs fois, et cela n'a rien à voir avec l'entreprise. Il est facile d'oublier d'écrire, et le résultat apparaîtra lors de l'exécution du code tronqué. Cette duplication de code rend non seulement le codage fastidieux, mais rend également difficile sa maintenance. AOP organise ces codes, place le code qui résout un certain problème d'aspect séparément dans un certain module, puis l'intègre dans le programme.

Termes en AOP

Apprentissage du cadre de printemps (6) AOP

Aspect : fonctions transversales,
classes abstraites, ou interfaces, l'important dans la programmation AOP est Les caractéristiques transversales sont identifiées.
(Aspects, similaires à la fonction d'encodage des caractères)
Conseil : La mise en œuvre spécifique de la fonction transversale doit être analysée en fonction de la situation réelle. Si c'est avant, avant que l'objet cible ne soit exploité et après. opération, c'est après
conseil.
(amélioré, similaire au filtre d'encodage de caractères)
Pointcut : point d'entrée, décrivant les limites de l'application des fonctions transversales, tous les processus ne sont pas requis, ceux qui peuvent être utilisés sont des points d'entrée
(similaire à Filtrer les règles de correspondance /*)
Joinpoint : point de connexion, ou le moment où un composant rejoint le processus, comme la définition de propriétés, l'appel de méthodes, etc. Spring ne prend en charge que les points de connexion pour les appels de méthode, tandis que certains autres frameworks prennent en charge les attributs de connexion. des points tels que : AspectJ,
(règles de filtrage similaires aux filtres REQUEST, FORWARD)
Weave : L'assemblage, le processus d'application de composants aux processus métier, est appelé assemblage ou tissage.
(Similaire au processus de configuration des filtres sur le Web. CGLIB peut être utilisé (les opérations de proxy sont effectuées à l'aide de l'héritage).
Cible, cible, l'objet réel de l'opération commerciale


Exemple : la définition du format de codage des caractères est considérée comme un aspect et l'intercepteur est une amélioration des conseils.

<!-- 字符编码过滤器-->
<filter>
<filter-name>characterFilter</filter-name>
<filter-class>com.bjpowernode.egov.filter.CharacterEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>characterFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
Classe de filtre

public class CharacterEncodingFilter implements Filter {
 
   @Override
   public void destroy() {}
 
   @Override
   public void doFilter(ServletRequest request, ServletResponse response,
      FilterChainchain) throws IOException, ServletException {
           request.setCharacterEncoding("GB18030");
           chain.doFilter(request,response);
   }
 
   @Override
   publicvoid init(FilterConfig filterConfig) throws ServletException {}
}
Cela élimine le besoin de définir l'encodage dans chaque servlet. .



Utilisation d'AOP dans le framework Spring

1, copie du package jar

Apprentissage du cadre de printemps (6) AOP

2, dans le fichier de configuration Spring Ajoutez des fichiers d'espace de noms et de contraintes

Activez la fonction aop : ajoutez simplement la balise et vous pouvez la extraire.

Apprentissage du cadre de printemps (6) AOP

3, écrivez la classe proxy et la classe étendue

Apprentissage du cadre de printemps (6) AOP

4, déclarées par le fichier de configuration

<!--声明目标类-->
<bean id="targetclass" class="com.spring.aop.TargetClass"></bean>

<!--声明扩展类-->
<bean id="extendsclass" class="com.spring.aop.extendsClass"></bean>

<!--织入扩展类,并声明在哪个方法上执行扩展类-->
<aop:config>
	<aop:aspect id="extendAspect" ref="">
		<aop:pointcut expression="execution(public ** (..))" id="extendsPoincat">
		<!--在目标方法执行前执行的方法-->
		<aop:before method="beforemethod" pointcut-ref="extendsPoincat" />
		<!--在目标方法执行后执行的方法-->
		<aop:after method="aftermethod" pointcut-ref="extendsPoincat" />
	</aop:aspect>
</aop:config>
5. Si le test

réussit, lors de l'exécution de la méthode cible targetmethod() dans la classe cible, la méthode beforemethod() dans la classe d'extension sera exécutée en premier, puis la méthode cible , et enfin la méthode aftermethod ().

Autrement dit, il suffit d'appeler manuellement la méthode targetmethod. Les deux frameworks de méthodes de la classe d'extension liront le fichier de configuration pendant l'exécution, obtiendront les informations correspondantes et nous ajouteront automatiquement la méthode étendue. .
Le test est définitivement réussi. Si vous n’y croyez pas, vous pouvez l’essayer vous-même.

Avantages de l'utilisation d'AOP dans le framework Spring

Aop est intégré au conteneur IOC de Spring, amélioré, et les points d'entrée sont tous des javabeans, qui peuvent être configurés dans le même fichier
Comme les autres parties de Spring , cela peut être n'importe quelle transplantation entre différents serveurs d'applications
Spring implémente l'interface d'interception d'Aop, afin que les utilisateurs n'aient pas à se lier à une interface d'intercepteur spécifique

Les idées de programmation orientées aspect d'Aop rompent avec la méthode orientée objet de la pensée, nous Ce que vous devez apprendre n'est pas seulement l'utilisation de l'aop, mais aussi la pensée orientée aspect.

Ce qui précède est le contenu de Spring Framework Learning (6) AOP. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn