

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AOP con Spring y el SDK de X-Ray para Java
<a name="xray-sdk-java-aop-spring"></a>

**nota**  
Aviso de SDK/Daemon mantenimiento de X-Ray: el 25 de febrero de 2026, el AWS X-Ray SDKs/Daemon entrará en modo de mantenimiento, donde AWS se limitarán las versiones de X-Ray SDK y Daemon para abordar únicamente los problemas de seguridad. Para obtener más información sobre la cronología del soporte, consulte [Cronología de X-Ray SDK y Daemon Support](xray-sdk-daemon-timeline.md). Recomendamos migrar a. OpenTelemetry Para obtener más información sobre la migración a OpenTelemetry, consulte [Migración de una instrumentación de rayos X a una instrumentación](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

En este tema se describe cómo utilizar el SDK de X-Ray y el marco de trabajo Spring para instrumentar una aplicación sin cambiar su lógica básica. Esto significa que ahora existe una forma no invasiva de instrumentar las aplicaciones que se ejecutan de forma remota. AWS

**Para habilitar AOP en Spring**

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

1. [Añada un filtro de rastreo a la aplicación](#xray-sdk-java-aop-filters-spring).

1. [Comente el código o implemente una interfaz](#xray-sdk-java-aop-annotate-or-implement)

1. [Active X-Ray en la aplicación](#xray-sdk-java-aop-activate-xray)

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

Puede utilizar Maven o Gradle para configurar Spring para que utilice AOP con el fin de instrumentar la aplicación.

Si utiliza Maven para compilar la aplicación, añada la siguiente dependencia al archivo `pom.xml`.

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

Para Gradle, añada la siguiente dependencia al archivo `build.gradle`.

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

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

Además de la dependencia de Spring descrita en la sección anterior, si utiliza Spring Boot, añada la siguiente dependencia si aún no está en su classpath. 

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'
```

## Adición de un filtro de rastreo a la aplicación
<a name="xray-sdk-java-aop-filters-spring"></a>

Añada un `Filter` a su clase `WebConfig`. Pase el nombre del segmento al constructor [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) como cadena. Para obtener más información sobre los filtros de rastreo y la instrumentación de las solicitudes entrantes, consulte [Rastreo de las solicitudes entrantes con el SDK de X-Ray para Java](xray-sdk-java-filters.md).

**Example src/main/java/myapp/WebConfig.java: primavera**  

```
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");
  }
}
```

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

 Spring 6 usa [Jakarta](https://spring.io/blog/2022/11/16/spring-framework-6-0-goes-ga) en lugar de Javax para su Enterprise Edition. Para admitir este nuevo espacio de nombres, X-Ray ha creado un conjunto paralelo de clases que viven en su propio espacio de nombres de Yakarta. 

Para las clases de filtro, sustituya `javax` por `jakarta`. Al configurar una estrategia de nomenclatura de segmentos, agregue `jakarta` antes del nombre de la clase de estrategia de nomenclatura, como en el siguiente ejemplo:

```
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"));
    }
}
```

## Anotación del código o implementación de una interfaz
<a name="xray-sdk-java-aop-annotate-or-implement"></a>

Las clases deben anotarse con la anotación `@XRayEnabled` o deben implementar la interfaz de `XRayTraced`. Esto indica al sistema de AOP que encapsule las funciones de la clase afectada para la instrumentación de X-Ray.

## Activación de X-Ray en la aplicación
<a name="xray-sdk-java-aop-activate-xray"></a>

Para activar el rastreo de X-Ray en la aplicación, el código debe extender la clase abstracta `BaseAbstractXRayInterceptor` anulando los siguientes métodos.
+ `generateMetadata`: esta función permite la personalización de los metadatos adjuntados al rastreo de la función actual. De forma predeterminada, el nombre de clase de la función que se ejecuta se registra en los metadatos. Puede añadir más datos si necesita más información.
+ `xrayEnabledClasses`: esta función está vacía, y debe seguir así. Sirve para alojar un conjunto de puntos de unión (pointcut) que indica al interceptor los métodos que debe encapsular. Defina el pointcut especificando las clases que se han anotado con `@XRayEnabled` que se deben rastrear. La siguiente instrucción pointcut indica al interceptor que encapsule todos los beans del controlador anotados con la anotación `@XRayEnabled`.

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

 Si su proyecto utiliza Spring Data JPA, considere la posibilidad de ampliar desde `AbstractXRayInterceptor` en lugar de `BaseAbstractXRayInterceptor`. 

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

El siguiente código extiende la clase abstracta `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() {}
  
}
```

El siguiente código es una clase que X-Ray va a instrumentar.

```
@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 ha configurado correctamente la aplicación, debe ver la pila de llamadas completa de la aplicación, desde el controlador hasta las llamadas a los servicios, tal y como se muestra en la siguiente captura de pantalla de la consola.

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