

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# AOP com o Spring e X-Ray SDK para Java
<a name="xray-sdk-java-aop-spring"></a>

**nota**  
Aviso de SDK/Daemon manutenção do X-Ray — Em 25 de fevereiro de 2026, o AWS X-Ray SDKs/Daemon entrará no modo de manutenção, onde AWS limitará as versões do X-Ray SDK e do Daemon para tratar apenas de problemas de segurança. Para obter mais informações sobre a linha do tempo do suporte, consulte [Cronograma de suporte do X-Ray SDK e do Daemon Support](xray-sdk-daemon-timeline.md). Recomendamos migrar para o. OpenTelemetry Para obter mais informações sobre a migração para OpenTelemetry, consulte [Migrando da instrumentação X-Ray para a instrumentação](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Este tópico descreve como usar o X-Ray SDK e o Spring Framework para instrumentar a aplicação sem alterar a lógica central. Isso significa que agora existe uma forma não invasiva de instrumentar seus aplicativos executados remotamente. AWS

**Para habilitar a AOP no spring**

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

1. [Adicionar um filtro de rastreamento ao aplicativo](#xray-sdk-java-aop-filters-spring)

1. [Anote o seu código ou implemente uma interface](#xray-sdk-java-aop-annotate-or-implement)

1. [Ative o X-Ray em seu aplicativo](#xray-sdk-java-aop-activate-xray)

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

Você pode usar o Maven ou o Gradle para configurar o Spring para usar AOP para instrumentar seu aplicativo.

Se você usar o Maven para compilar seu aplicativo, adicione a dependência a seguir no arquivo `pom.xml`.

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

Para o Gradle, adicione a seguinte dependência no arquivo `build.gradle`.

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

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

Além da dependência do Spring descrita na seção anterior, se você estiver usando o Spring Boot, adicione a seguinte dependência se ela ainda não estiver no 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'
```

## Adicionar um filtro de rastreamento ao aplicativo
<a name="xray-sdk-java-aop-filters-spring"></a>

Adicione um `Filter` à classe `WebConfig`. Passe o nome do segmento para o construtor [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 uma string. Para obter mais informações sobre filtros de rastreamento e instrumentar solicitações de entrada, consulte [Rastrear solicitações recebidas com o X-Ray SDK 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");
  }
}
```

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

 O Spring 6 usa [Jakarta](https://spring.io/blog/2022/11/16/spring-framework-6-0-goes-ga) em vez de Javax na Enterprise Edition. Para oferecer compatibilidade com esse novo namespace, o X-Ray criou um conjunto paralelo de classes que residem em seu próprio namespace Jacarta. 

Para as classes de filtro, substitua `javax` por `jakarta`. Ao configurar uma estratégia de nomeação de segmentos, adicione `jakarta` antes do nome da classe da estratégia, como no seguinte exemplo:

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

## Anotar o código ou implementar uma interface
<a name="xray-sdk-java-aop-annotate-or-implement"></a>

Anote suas classes com a anotação `@XRayEnabled` ou implemente a interface `XRayTraced`. Isso informa ao sistema de AOP para encapsular as funções da classe afetada para a instrumentação do X-Ray.

## Ativar o X-Ray na aplicação
<a name="xray-sdk-java-aop-activate-xray"></a>

Para ativar o rastreamento do X-Ray na aplicação, o código deve estender a classe abstrata `BaseAbstractXRayInterceptor` substituindo os métodos a seguir.
+ `generateMetadata`: esta função permite a personalização dos metadados anexados ao rastreamento da função atual. Por padrão, o nome de classe da função de execução é registrada nos metadados. Você pode adicionar mais dados se precisar de informações adicionais.
+ `xrayEnabledClasses`: esta função está vazia e deve permanecer assim. Ela serve como host para um pointcut, instruindo o interceptor sobre quais métodos devem ser encapsulados. Defina o pointcut especificando quais das classes que estão anotadas com `@XRayEnabled` serão rastreadas. A seguinte instrução de pointcut informa ao interceptor para encapsular todos os beans do controlador anotados com a anotação `@XRayEnabled`.

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

 Se seu projeto estiver usando o Spring Data JPA, considere a possibilidade de estender de `AbstractXRayInterceptor` em vez de `BaseAbstractXRayInterceptor`. 

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

O código a seguir estende a classe abstrata `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() {}
  
}
```

O código a seguir é uma classe que será instrumentada pelo 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());        
        }    
    }
}
```

Se você tiver configurado seu aplicativo corretamente, deverá ver a pilha de chamadas completa do aplicativo, do controlador até as chamadas de serviço, conforme mostrado na captura de tela do console a seguir.

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