J2EE Qualifier注入
J2EE中,可以通过Qualifier注解指定注入哪个bean。
1、首先定义需要注入的接口SayHello:
public interface SayHello {
public String say();
}
2、准备实现两个SayHello接口,为了让容器在注入时进行区分,先定义两个Qualifier Hello1和Hello2:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface Hello1 {
}
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface Hello2 {
}
3、编写SayHello接口的实现,在类上添加Qualifier:
@Hello1
public class SayHelloImpl1 implements SayHello {
@Override
public String say() {
return "SayHelloImp1";
}
}
@Hello2
public class SayHelloImpl2 implements SayHello {
@Override
public String say() {
return "SayHelloImp2";
}
}
4、使用Qualifier注入bean。
使用@Hello1注解注入SayHelloImpl1类型的bean,使用@Hello1注解注入SayHelloImpl1类型的bean:
public class SayHelloTest1 {
@Hello1
private SayHello s1;
@Hello2
private SayHello s2;
@Test
public void testSayHello1() {
Assert.assertEquals("SayHelloImp1", s1.say());
}
@Test
public void testSayHello2() {
Assert.assertEquals("SayHelloImp2", s2.say());
}
}
5、可以@Default注解定义接口的默认实现,当没有指定Qualifier时,容器使用此默认实现进行注入。
@Default
public class SayHelloDefaultImpl implements SayHello {
@Override
public String say() {
return "SayHelloDefaultImpl";
}
}