

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# AOP avec Spring et le SDK X-Ray pour Java
<a name="xray-sdk-java-aop-spring"></a>

**Note**  
Avis de SDK/Daemon maintenance de X-Ray — Le 25 février 2026, le AWS X-Ray SDKs/Daemon passera en mode maintenance, où les versions du SDK et du Daemon de X-Ray AWS seront limitées uniquement pour résoudre les problèmes de sécurité. Pour plus d'informations sur le calendrier de support, consultez[Chronologie du support pour le SDK et Daemon X-Ray](xray-sdk-daemon-timeline.md). Nous vous recommandons de migrer vers OpenTelemetry. Pour plus d'informations sur la migration vers OpenTelemetry, consultez la section [Migration de l'instrumentation X-Ray vers OpenTelemetry l'instrumentation](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html).

Cette rubrique décrit comment utiliser le SDK X-Ray et le Spring Framework pour instrumenter votre application sans en modifier la logique de base. Cela signifie qu'il existe désormais un moyen non invasif d'instrumenter vos applications exécutées à AWS distance.

**Pour activer AOP dans Spring**

1. [Configurez Spring](#xray-sdk-java-aop-spring-configuration)

1. [Ajoutez un filtre de suivi à votre application](#xray-sdk-java-aop-filters-spring)

1. [Annotez votre code ou implémentez une interface](#xray-sdk-java-aop-annotate-or-implement)

1. [Activez X-Ray dans votre application](#xray-sdk-java-aop-activate-xray)

## Configuration de Spring
<a name="xray-sdk-java-aop-spring-configuration"></a>

Vous pouvez utiliser Maven ou Gradle pour configurer Spring afin de vous servir d'AOP pour instrumenter votre application.

Si vous utilisez Maven pour créer votre application, ajoutez la dépendance suivante dans votre fichier `pom.xml`.

```
<dependency> 
     <groupId>com.amazonaws</groupId> 
     <artifactId>aws-xray-recorder-sdk-spring</artifactId> 
     <version>2.11.0</version> 
</dependency>
```

Pour Gradle, ajoutez la dépendance suivante dans votre fichier `build.gradle`.

```
compile 'com.amazonaws:aws-xray-recorder-sdk-spring:2.11.0'
```

## Configuration de Spring Boot
<a name="xray-sdk-java-aop-spring-boot-configuration"></a>

Outre la dépendance Spring décrite dans la section précédente, si vous utilisez Spring Boot, ajoutez la dépendance suivante si elle ne figure pas déjà dans votre chemin de classe. 

Maven :

```
<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-aop</artifactId> 
     <version>2.5.2</version> 
</dependency>
```

Gradle :

```
compile 'org.springframework.boot:spring-boot-starter-aop:2.5.2'
```

## Ajouter un filtre de suivi à votre application
<a name="xray-sdk-java-aop-filters-spring"></a>

Ajoutez un `Filter` à votre `WebConfig` classe. Transmettez le nom du segment au constructeur [https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/javax/servlet/AWSXRayServletFilter.html](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/javax/servlet/AWSXRayServletFilter.html) en tant que chaîne. Pour plus d'informations sur le suivi des filtres et l'instrumentation des demandes entrantes, consultez[Suivi des demandes entrantes avec le SDK X-Ray pour Java](xray-sdk-java-filters.md).

**Example src/main/java/myapp/WebConfig.java - printemps**  

```
package myapp;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import javax.servlet.Filter;
import [com.amazonaws.xray.javax.servlet.AWSXRayServletFilter](https://docs.aws.amazon.com/xray-sdk-for-java/latest/javadoc/com/amazonaws/xray/javax/servlet/AWSXRayServletFilter.html);

@Configuration
public class WebConfig {

  @Bean
  public Filter TracingFilter() {
    return new AWSXRayServletFilter("Scorekeep");
  }
}
```

## Support à Jakarta
<a name="xray-sdk-java-aop-jakarta-support"></a>

 Spring 6 utilise [Jakarta](https://spring.io/blog/2022/11/16/spring-framework-6-0-goes-ga) au lieu de Javax pour son édition Enterprise. Pour prendre en charge ce nouvel espace de noms, X-Ray a créé un ensemble parallèle de classes qui vivent dans leur propre espace de noms Jakarta. 

Pour les classes de filtres, remplacez `javax` par`jakarta`. Lorsque vous configurez une stratégie de dénomination de segment, ajoutez-la `jakarta` avant le nom de classe de stratégie de dénomination, comme dans l'exemple suivant :

```
package myapp;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import jakarta.servlet.Filter;
import com.amazonaws.xray.jakarta.servlet.AWSXRayServletFilter;
import com.amazonaws.xray.strategy.jakarta.SegmentNamingStrategy;

@Configuration
public class WebConfig {
    @Bean
    public Filter TracingFilter() {
        return new AWSXRayServletFilter(SegmentNamingStrategy.dynamic("Scorekeep"));
    }
}
```

## Annotation de votre code ou implémentation d'une interface
<a name="xray-sdk-java-aop-annotate-or-implement"></a>

Vos classes doivent soit être annotées avec l'`@XRayEnabled`annotation, soit implémenter l'`XRayTraced`interface. Cela demande au système AOP d'encapsuler les fonctions de la classe affectée pour l'instrumentation X-Ray.

## Activation de X-Ray dans votre application
<a name="xray-sdk-java-aop-activate-xray"></a>

Pour activer le traçage X-Ray dans votre application, votre code doit étendre la classe abstraite `BaseAbstractXRayInterceptor` en remplaçant les méthodes suivantes.
+ `generateMetadata`—Cette fonction permet de personnaliser les métadonnées associées à la trace de la fonction en cours. Par défaut, le nom de classe de la fonction d'exécution est enregistré dans les métadonnées. Vous pouvez ajouter des données supplémentaires si vous avez besoin d'informations supplémentaires.
+ `xrayEnabledClasses`—Cette fonction est vide et doit le rester. Elle sert d'hôte pour un pointcut demandant à l'intercepteur quelles méthodes encapsuler. Définissez le pointcut en spécifiant les classes qui sont annotées avec `@XRayEnabled` pour effectuer le suivi. L'instruction de pointcut suivante demande à l'intercepteur d'encapsuler tous les beans de contrôleur annotés avec l'annotation `@XRayEnabled`.

  ```
  @Pointcut(“@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)”)
  ```

 Si votre projet utilise Spring Data JPA, envisagez d'étendre depuis `AbstractXRayInterceptor` au lieu de`BaseAbstractXRayInterceptor`. 

## Exemple
<a name="xray-sdk-java-aop-example"></a>

Le code suivant étend la classe abstraite`BaseAbstractXRayInterceptor`.

```
@Aspect
@Component
public class XRayInspector extends BaseAbstractXRayInterceptor {    
    @Override    
    protected Map<String, Map<String, Object>> generateMetadata(ProceedingJoinPoint proceedingJoinPoint, Subsegment subsegment) throws Exception {      
        return super.generateMetadata(proceedingJoinPoint, subsegment);    
    }    
  
  @Override    
  @Pointcut("@within(com.amazonaws.xray.spring.aop.XRayEnabled) && bean(*Controller)")    
  public void xrayEnabledClasses() {}
  
}
```

Le code suivant est une classe qui sera instrumentée par X-Ray.

```
@Service
@XRayEnabled
public class MyServiceImpl implements MyService {    
    private final MyEntityRepository myEntityRepository;    
    
    @Autowired    
    public MyServiceImpl(MyEntityRepository myEntityRepository) {        
        this.myEntityRepository = myEntityRepository;    
    }    
    
    @Transactional(readOnly = true)    
    public List<MyEntity> getMyEntities(){        
        try(Stream<MyEntity> entityStream = this.myEntityRepository.streamAll()){            
            return entityStream.sorted().collect(Collectors.toList());        
        }    
    }
}
```

Si vous avez correctement configuré votre application, vous devez voir la pile d'appels complète de l'application, depuis le contrôleur jusqu'aux appels de service, comme illustré dans la capture d'écran suivante de la console.

![\[Timeline showing API call duration and breakdown of server operations for metering service.\]](http://docs.aws.amazon.com/fr_fr/xray/latest/devguide/images/aop-spring-console.png)
