Micronaut Method Adapter Advice

2023-03-02 14:05 更新

在某些情況下,您希望根據(jù)方法上是否存在注釋來(lái)引入新的 bean。這方面的一個(gè)示例是 @EventListener 注釋,它為調(diào)用注釋方法的每個(gè)注釋方法生成 ApplicationEventListener 的實(shí)現(xiàn)。

例如,以下代碼片段在 ApplicationContext 啟動(dòng)時(shí)運(yùn)行方法中包含的邏輯:

import io.micronaut.context.event.StartupEvent;
import io.micronaut.runtime.event.annotation.EventListener;
...

@EventListener
void onStartup(StartupEvent event) {
    // startup logic here
}

@EventListener 注解的存在導(dǎo)致 Micronaut 創(chuàng)建一個(gè)新類來(lái)實(shí)現(xiàn) ApplicationEventListener 并調(diào)用上面 bean 中定義的 onStartup 方法。

@EventListener 的實(shí)際實(shí)現(xiàn)很簡(jiǎn)單;它只是使用@Adapter 注釋來(lái)指定它適應(yīng)的 SAM(單一抽象方法)類型:

import io.micronaut.aop.Adapter;
import io.micronaut.context.event.ApplicationEventListener;
import io.micronaut.core.annotation.Indexed;

import java.lang.annotation.*;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Documented
@Retention(RUNTIME)
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Adapter(ApplicationEventListener.class) (1)
@Indexed(ApplicationEventListener.class)
@Inherited
public @interface EventListener {
}
  1. @Adapter 注釋指示要適應(yīng)的 SAM 類型,在本例中為 ApplicationEventListener。

如果指定了 SAM 接口,Micronaut 還會(huì)自動(dòng)對(duì)齊泛型類型。

使用此機(jī)制,您可以定義自定義注釋,這些注釋使用 @Adapter 注釋和 SAM 接口在編譯時(shí)自動(dòng)為您實(shí)現(xiàn) bean。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)