IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plateformes réactives et architectures modulaires Java Discussion :

AspectJ en programmation aspect


Sujet :

Plateformes réactives et architectures modulaires Java

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2010
    Messages : 146
    Points : 156
    Points
    156
    Par défaut AspectJ en programmation aspect
    j'ai pas compris la différence entre call et exécution


    Nom : a.png
Affichages : 197
Taille : 46,4 Ko



    la deusiéme question est si un code Aspect est un composant comment je peux l'improter d'une application à une autre ? est ce je peux générer un artifact (un jar par exemple) et l'invoquer dans une autre application ?
    mercu

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    D'un point de vues pratique, un Aspect appliqué à l'appel (call) nécessite de weaver toutes les classes faisant appel à la cible de l'aspect
    et seules ces classes weavées bénéficieront de l'aspect (on peut donc décider que certaines ne doivent pas être weavées)
    tandis qu'un Aspect appliqué à l'exécution nécessite de weaver seulement la classe qui contient la définition de la cible mais alors aussi toutes les exécutions auront
    d'office l'aspect appliqué.

    Dans des petits projets cela ne change pas grand chose, mais si vous faites des librairies utilisées par d'autres, ce choix détermine ce que vous devez livrer
    et comme le "client" va l'intégrer dans son projet, ce qui nous amène à votre deuxième question :
    vous pouvez livrer vos Aspects sous forme de JAR et les utiliser dans un autre projet (ou un autre module d'un même projet multi-modules)

    Si vous utilisez Maven, cela implique d'utiliser le plug-in ,
    dans le module contenant les Aspects:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>aspectj-maven-plugin</artifactId>
                    <version>${maven-aspectj-plugin.version}</version>
                    <executions>
                        <execution>
                            <id>compile</id>
                            <goals>
                                <goal>compile</goal>
                                <goal>aspectj-report</goal>
                            </goals>
                            <configuration>
                                <source>${java.version}</source>
                                <target>${jdk.version}</target>
                                <complianceLevel>${jdk.version}</complianceLevel>
                                <ajdtBuildDefFile>build.ajproperties</ajdtBuildDefFile>
                            </configuration>
                        </execution>
                        <execution>
                            <id>test-compile</id>
                            <goals>
                                <goal>test-compile</goal>
                            </goals>
                            <configuration>
                                <source>${java.version}</source>
                                <target>${jdk.version}</target>
                                <complianceLevel>${jdk.version}</complianceLevel>
                                <ajdtBuildDefFile>build.test.ajproperties</ajdtBuildDefFile>
                            </configuration>
                        </execution>
                    </executions>
                    <configuration>
                        <outxml>true</outxml>
                        <source>${java.version}</source>
                        <target>${jdk.version}</target>
                        <complianceLevel>${java.version}</complianceLevel>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjrt</artifactId>
                            <version>${org.aspectj.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjtools</artifactId>
                            <version>${org.aspectj.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
    les build.ajproperties et build.test.ajproperties contenant une simple ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src.includes=src/main/aspect
    (éventuellement aussi si votre lib a besoin aussi de code .java)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src.includes=src/main/aspect,src/test/java
    (les JUNIT sont forcément en Java)

    et du côté du module/projet client de votre JAR contenant les aspects:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>aspectj-maven-plugin</artifactId>
                    <version>${maven-aspectj-plugin.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                                <goal>test-compile</goal>
                            </goals>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjrt</artifactId>
                            <version>${org.aspectj.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjtools</artifactId>
                            <version>${org.aspectj.version}</version>
                        </dependency>
                    </dependencies>
                    <configuration>
                        <source>${java.version}</source>
                        <target>${java.version}</target>
                        <complianceLevel>${java.version}</complianceLevel>
                        <forceAjcCompile>true</forceAjcCompile>
                        <aspectLibraries>
                            <aspectLibrary>
                                <groupId>YOUR_GROUP_ID</groupId>
                                <artifactId>YOUR_ASPECT_LIB_ARTIFACT_ID</artifactId>
                            </aspectLibrary>
                        </aspectLibraries>
     
                        <verbose>false</verbose>
                        <showWeaveInfo>true</showWeaveInfo>
                    </configuration>
                </plugin>
    et évidemment votre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    YOUR_GROUP_ID/YOUR_ASPECT_LIB_ARTIFACT_ID
    doit aussi être déclaré dans les du client.

Discussions similaires

  1. Réponses: 10
    Dernier message: 02/03/2015, 13h13
  2. [AspectJ] Programmation par aspect (AOP) avec AspectJ
    Par Bassemca dans le forum Autres
    Réponses: 1
    Dernier message: 19/12/2009, 12h50
  3. [AspectJ] programmation orientée aspect
    Par soeursourire dans le forum Autres
    Réponses: 6
    Dernier message: 11/02/2006, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo