繁体   English   中英

使用Spring自动配置的自定义@Qualifier

[英]Custom @Qualifier with Spring autoconfig

我不确定如何在Spring中将自定义限定符接口与组件扫描和自动装配一起使用。 我有一个界面:

@Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface BigBean {
}

我想注入的豆:

@Component
public class Bean {

   @Autowired
   @BigBean("A")
   private SomeBean sb;

   public SomeBean getSb() {
       return sb;
   }
   public void setSb(SomeBean sb) {
       this.sb = sb;
   }
}

和相同类型的bean要通过自定义限定符加以区分:

@Component
@BigBean("A") //<-????
public class SmallBeanA implements SomeBean{
}

@Component
public class SmallBeanB implements SomeBean{
}

在我的情况下,我在spring文档中发现的内容无法编译。 如何使用我拥有的这个自定义限定词?

您需要将属性值添加到BigBean批注中,如下所示:

@Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface BigBean {

    String value() default "";
}

现在这有点旧了,不确定我的答案是否有帮助,但让我尝试。 下面的代码用于注入SomeBean的选定实例。


@Qualifier
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface BigBean {
    String value() default "";
}


public interface SomeBean { 
}


@Component
@BigBean("A")
public class SmallBeanA implements SomeBean {
    private SmallBeanA() {
        System.out.println("SmallBeanA constructed");
    }
    @Override
    public String toString() {
        return "SmallBeanA";
    }
}


@Component
@BigBean("B")
public class SmallBeanB implements SomeBean{
    private SmallBeanB() {
        System.out.println("SmallBeanB constructed");
    }
    @Override
    public String toString() {
        return "SmallBeanB";
    }
}


@Component
public class Bean {
    @Autowired
    @BigBean("A")
    private SomeBean sb;
    public SomeBean getSb() {
        return sb;
    }
    @Override
    public String toString() {
        return "Bean [sb=" + sb + "]";
    }
}



public class QualifierTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml");
        Bean myBean = context.getBean(Bean.class);
        System.out.println(myBean.getSb().toString());
        //OR
        System.out.println(myBean.toString());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM