03_Adaptive注解

【Adaptive注解】

package com.alibaba.dubbo.common.extension;

import com.alibaba.dubbo.common.URL;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 在{@link ExtensionLoader}生成Extension的Adaptive Instance时,为{@link ExtensionLoader}提供信息。
 */

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Adaptive {

    /**
     * 从{@link URL}的Key名,对应的Value作为要Adapt成的Extension名。
     * 如果{@link URL}这些Key都没有Value,使用 用 缺省的扩展(在接口的{@link SPI}中设定的值)。
     * 比如,String[] {"key1", "key2"},表示先在URL上找key1的Value作为要Adapt成的Extension名;
     * key1没有Value,则使用key2的Value作为要Adapt成的Extension名。
     * key2没有Value,使用缺省的扩展。
     * 如果没有设定缺省扩展,则方法调用会抛出{@link IllegalStateException}。
     * 如果不设置则缺省使用Extension接口类名的点分隔小写字串。
     * 即对于Extension接口{@code com.alibaba.dubbo.xxx.YyyInvokerWrapper}的缺省值为<code>String[] {"yyy.invoker.wrapper"}
     *
     */
    String[] value() default {};

}

【Adaptive分别作用在类或方法上】

作用在类上

作用在方法上

【@Adaptive注解在类上和方法上的区别】

1.注解在类上

代表人工实现编码,即实现了一个装饰类,例如ExtensionFactory

2.注解在方法上

代表自动生成和编译一个动态的adaptive类,例如:Protocol$Adaptive

原文地址:https://www.cnblogs.com/HigginCui/p/9602112.html