[英]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.