W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在某些情況下,您希望根據(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 {
}
@Adapter 注釋指示要適應(yīng)的 SAM 類型,在本例中為 ApplicationEventListener。
如果指定了 SAM 接口,Micronaut 還會(huì)自動(dòng)對(duì)齊泛型類型。
使用此機(jī)制,您可以定義自定義注釋,這些注釋使用 @Adapter 注釋和 SAM 接口在編譯時(shí)自動(dòng)為您實(shí)現(xiàn) bean。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: