# Анотації

LLMS index: [llms.txt](/llms.txt)

---

<!-- markdownlint-disable blanks-around-fences -->
<?code-excerpt path-base="examples/java/spring-starter"?>

Для більшості користувачів вбудована інструменталізація є цілком достатньою і нічого більше не потрібно робити. Однак іноді користувачі бажають створювати [відрізки](/docs/concepts/signals/traces/#spans) для свого власного коду без необхідності вносити багато змін у код.

Якщо додати анотацію `WithSpan` до методу, метод буде обгорнутий у відрізок. Анотація `SpanAttribute` дозволяє захоплювати аргументи методу як атрибути.

<!-- prettier-ignore-start -->
<?code-excerpt "src/main/java/otel/TracedClass.java"?>
```java
package otel;

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.instrumentation.annotations.SpanAttribute;
import io.opentelemetry.instrumentation.annotations.WithSpan;
import org.springframework.stereotype.Component;

/** Тест WithSpan */
@Component
public class TracedClass {

  @WithSpan
  public void tracedMethod() {}

  @WithSpan(value = "назва спану")
  public void tracedMethodWithName() {
    Span currentSpan = Span.current();
    currentSpan.addEvent("ДОДАТИ ПОДІЮ ДО tracedMethodWithName SPAN");
    currentSpan.setAttribute("isTestAttribute", true);
  }

  @WithSpan(kind = SpanKind.CLIENT)
  public void tracedClientSpan() {}

  @WithSpan
  public void tracedMethodWithAttribute(@SpanAttribute("attributeName") String parameter) {}
}
```
<!-- prettier-ignore-end -->

> [!NOTE]
>
> Анотації OpenTelemetry використовують Spring AOP на основі проксі.
>
> Ці анотації працюють лише для методів проксі. Ви можете дізнатися більше у [документації Spring](https://docs.spring.io/spring-framework/reference/core/aop/proxying.html).
>
> У наступному прикладі анотація `WithSpan` не буде нічого робити, коли викликається GET-точка доступу:
>
> ```java
> @RestController
> public class MyControllerManagedBySpring {
>
>     @GetMapping("/ping")
>     public void aMethod() {
>         anotherMethod();
>     }
>
>     @WithSpan
>     public void anotherMethod() {
>     }
> }
> ```



<div class="alert alert-primary" role="alert"><div class="h4 alert-heading" role="heading">Примітка</div>



Щоб мати можливість використовувати анотації OpenTelemetry, вам потрібно додати залежність Spring Boot Starter AOP до вашого проєкту:

   <ul class="nav nav-tabs" id="tabs-0" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
          data-td-tp-persist="maven (`pom.xml`)" aria-controls="tabs-00-00" aria-selected="true">
        Maven (<code>pom.xml</code>)
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
          data-td-tp-persist="gradle (`build.gradle`)" aria-controls="tabs-00-01" aria-selected="false">
        Gradle (<code>build.gradle</code>)
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-0-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl"><span class="nt">&lt;dependencies&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&lt;dependency&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;groupId&gt;</span>org.springframework.boot<span class="nt">&lt;/groupId&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;artifactId&gt;</span>spring-boot-starter-aop<span class="nt">&lt;/artifactId&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&lt;/dependency&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nt">&lt;/dependencies&gt;</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-kotlin" data-lang="kotlin"><span class="line"><span class="cl"><span class="n">dependencies</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">implementation</span><span class="p">(</span><span class="s2">&#34;org.springframework.boot:spring-boot-starter-aop&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
    </div>
</div>


<!-- markdownlint-restore -->

</div>


Ви можете вимкнути анотації OpenTelemetry, встановивши властивість `otel.instrumentation.annotations.enabled` у `false`.

Ви можете налаштувати відрізок, використовуючи елементи анотації `WithSpan`:

| Назва   | Тип        | Опис           | Стандартне значення |
| ------- | ---------- | -------------- | ------------------- |
| `value` | `String`   | Назва відрізку | ClassName.Method    |
| `kind`  | `SpanKind` | Тип відрізку   | `SpanKind.INTERNAL` |

Ви можете встановити назву атрибута за допомогою елемента `value` анотації `SpanAttribute`:

| Назва   | Тип      | Опис           | Стандартне значення    |
| ------- | -------- | -------------- | ---------------------- |
| `value` | `String` | Назва атрибута | Назва параметра методу |

## Наступні кроки {#next-steps}

Окрім використання анотацій, OpenTelemetry API дозволяє отримати трасувальник, який може бути використаний [вашим власним інструментарієм](../api).
