首页 > 解决方案 > 我们如何利用自定义的@Qualifier 方法?

问题描述

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

我们如何利用限定符的方法?假设我有一个习惯,@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()for 匹配名称?String value()创建自定义时是否会覆盖相同的内容@Qualifier

---更新信息如下---

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

@Service
public class iPadAppStoreService {

....

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

....
}

标签: javaspringannotations

解决方案


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

你打电话给他们。


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

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

whereclazz是一个用 注释的类@Store


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

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


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

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


推荐阅读