【问题标题】:How can we utilize the custom @Qualifier methods?我们如何利用自定义的@Qualifier 方法?
【发布时间】:2021-02-09 05:32:36
【问题描述】:

我有多个关于如何实现/使用注释方法的问题。

我们如何利用限定符的方法?假设我有一个自定义 @Qualifier 即。 @Store 代表一个 AppStore,有 2 个方法。如何使用传递给DeviceType deviceType() 的值?

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Store {

    String value();

    DeviceType deviceType() default DeviceType.Phone;

    public enum DeviceType{
        Phone, Tablet;
    }

}

@Qualifier 如何在内部使用String value() 来匹配名称? 在创建自定义 @Qualifier 时,String value() 是否会覆盖相同的内容?

--- 以下更新信息 ---

我有一个服务,它包含一个 AppStore 类型的字段,它有一个 @Autowired 和 @Store 注释。获取到 iPadAppStoreService 的 bean 后如何访问注解中传入的 deviceType?

@Service
public class iPadAppStoreService {

....

    @Autowired(required=false)
    @Store(value = "appleAppStore",
    deviceType = DeviceType.Tablet)
    private AppStore applicationStore;

....
}

【问题讨论】:

  • “访问设备类型”是什么意思?从哪里访问? --- 我假设AppStore 是一个接口,并且你有多个实现类,每个类都用@Store 注释。这些注释是否有元素deviceType,这意味着什么?
  • 所以这个例子只是为了理解这个概念。 deviceType 表示它是平板电脑还是手机。因为根据这些设备类型可能会有不同的应用商店实例。因此,我们可能有 iPadAppStore 和 iPhoneAppStore 的不同实例。
  • 这就是@Qualifiervalue 元素的用途,选择处理iPadiPhoneAppStore 实现。如果你只有一个apple 实现,那么deviceType 在代码中的什么地方使用?重复我的问题:访问deviceType 从哪里

标签: java spring annotations


【解决方案1】:

我们如何使用限定符的方法?

你打电话给他们。


假设我有一个自定义 @Qualifier 即。 @Store 代表一个 AppStore,有 2 个方法。如何使用传递给DeviceType deviceType() 的值?

Store storeAnnotation = clazz.getAnnotation(Store.class);
DeviceType deviceType = storeAnnotation.deviceType();

其中clazz 是一个已用@Store 注释的类。


@Qualifier 在内部如何使用String value() 来匹配名称?

如果@Autowired 字段/方法/参数按类型找到多个候选者,并且还有一个@Qualifier 注释(或类似@Store 的派生注释),它将查找已使用注释的候选类型@Qualifier 与匹配的 value 元素。


在创建自定义 @Qualifier 时,String value() 是否会覆盖相同的内容?

是的,@Store 注释的处理方式与@Qualifier 注释相同,即其元素值的使用方式相同。 Spring 会忽略任何额外的元素值,并且只会被您添加的代码使用。

【讨论】:

  • 我更新了更多信息。当我得到 bean iPadAppStoreService 时,我想检索设置为 deviceType 的信息。
  • 我问“限定符如何在内部使用字符串 value() 来匹配名称?”是什么意思?是该方法的实现在哪里,因为我可能必须在我的自定义限定符中添加一个新方法,该方法将包含一些逻辑。
猜你喜欢
  • 2019-03-23
  • 1970-01-01
  • 2014-01-02
  • 2023-01-15
  • 2012-03-14
  • 2010-09-30
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多