[英]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{
}
您需要將屬性值添加到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.