

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# AOP dengan Spring dan X-Ray SDK for Java
<a name="xray-sdk-java-aop-spring"></a>

**catatan**  
Pemberitahuan SDK/Daemon Pemeliharaan X-Ray - Pada 25 Februari 2026, AWS SDKs/Daemon X-Ray akan memasuki mode pemeliharaan, di mana AWS akan membatasi rilis X-Ray SDK dan Daemon untuk mengatasi masalah keamanan saja. Untuk informasi selengkapnya tentang garis waktu dukungan, lihat[Garis waktu Dukungan X-Ray SDK dan Daemon](xray-sdk-daemon-timeline.md). Kami merekomendasikan untuk bermigrasi ke OpenTelemetry. Untuk informasi lebih lanjut tentang migrasi ke OpenTelemetry, lihat [Migrasi dari instrumentasi X-Ray ke instrumentasi](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html). OpenTelemetry 

Topik ini menjelaskan cara menggunakan SDK X-Ray dan Kerangka Kerja Spring untuk menginstrumentasikan aplikasi Anda tanpa mengubah logika intinya. Ini berarti bahwa sekarang ada cara non-invasif untuk instrumen aplikasi Anda berjalan dari jarak jauh. AWS

**Untuk mengaktifkan AOP di Spring**

1. [Konfigurasikan Musim Semi](#xray-sdk-java-aop-spring-configuration)

1. [Tambahkan filter penelusuran ke aplikasi Anda](#xray-sdk-java-aop-filters-spring)

1. [Beri anotasi kode Anda atau terapkan antarmuka](#xray-sdk-java-aop-annotate-or-implement)

1. [Aktifkan X-Ray di aplikasi Anda](#xray-sdk-java-aop-activate-xray)

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

Anda dapat menggunakan Maven atau Gradle untuk mengonfigurasi Spring menggunakan AOP untuk instrumen aplikasi Anda.

Jika Anda menggunakan Maven untuk membangun aplikasi Anda, tambahkan ketergantungan berikut di file `pom.xml` Anda.

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

Untuk Gradle, tambahkan ketergantungan berikut di file `build.gradle` Anda.

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

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

Selain ketergantungan Spring yang dijelaskan di bagian sebelumnya, jika Anda menggunakan Spring Boot, tambahkan dependensi berikut jika belum ada di classpath Anda. 

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

## Menambahkan filter pelacakan ke aplikasi Anda
<a name="xray-sdk-java-aop-filters-spring"></a>

Tambahkan `Filter` ke kelas `WebConfig` Anda. Teruskan nama segmen ke konstruktor [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) sebagai string. Untuk informasi selengkapnya tentang filter pelacakan dan menginstrumentasikan permintaan masuk, lihat [Menelusuri permintaan yang masuk dengan X-Ray SDK for Java](xray-sdk-java-filters.md).

**Example src/main/java/myapp/WebConfig.java - musim semi**  

```
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 menggunakan [Jakarta](https://spring.io/blog/2022/11/16/spring-framework-6-0-goes-ga) sebagai pengganti Javax untuk Enterprise Edition. Untuk mendukung namespace baru ini, X-Ray telah menciptakan serangkaian kelas paralel yang hidup di namespace Jakarta mereka sendiri. 

Untuk kelas filter, ganti `javax` dengan`jakarta`. Saat mengonfigurasi strategi penamaan segmen, tambahkan `jakarta` sebelum nama kelas strategi penamaan, seperti pada contoh berikut:

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

## Anotasi kode Anda atau menerapkan antarmuka
<a name="xray-sdk-java-aop-annotate-or-implement"></a>

Kelas Anda harus dianotasikan dengan `@XRayEnabled`, atau menerapkan antarmuka `XRayTraced`. Langkah ini memberitahu sistem AOP untuk membungkus fungsi kelas yang terdampak untuk instrumentasi X-Ray.

## Mengaktifkan X-Ray dalam aplikasi
<a name="xray-sdk-java-aop-activate-xray"></a>

Untuk mengaktifkan pelacakan X-Ray dalam aplikasi Anda, kode Anda harus memperpanjang kelas abstrak `BaseAbstractXRayInterceptor`dengan menimpa metode berikut.
+ `generateMetadata`—Fungsi ini mengizinkan kustomisasi metadata yang terlampir pada pelacakan fungsi saat ini. Secara default, nama kelas dari fungsi yang sedang berjalan dicatat dalam metadata. Anda dapat menambahkan lebih banyak data jika Anda memerlukan informasi tambahan.
+ `xrayEnabledClasses`—Fungsi ini kosong, dan harus tetap demikian. Berfungsi sebagai host untuk pointcut yang menginstruksikan penghalang tentang metode yang digunakan untuk membungkus. Tentukan pointcut dengan menentukan kelas yang dianotasikan dengan`@XRayEnabled` untuk melacak. Pernyataan pointcut berikut memberitahu penghalang untuk membungkus semua pengendali bean yang teranotasi dengan anotasi `@XRayEnabled`.

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

 Jika proyek Anda menggunakan Spring Data JPA, pertimbangkan untuk memperpanjang dari `AbstractXRayInterceptor` bukan. `BaseAbstractXRayInterceptor` 

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

Kode berikut memperluas kelas abstrak `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() {}
  
}
```

Kode berikut adalah kelas yang akan diinstrumentasi oleh 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());        
        }    
    }
}
```

Jika Anda telah mengonfigurasi aplikasi Anda dengan benar, Anda akan melihat tumpukan panggilan aplikasi yang lengkap, dari pengendali hingga panggilan layanan seperti yang ditunjukkan pada tangkapan layar konsol tersebut.

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