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