簡體   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