In the last example we saw how to inject multiple beans into arrays and collections. This example shows how to use @Qualifier annotation for selection of array/collection/map elements.
Examples
Beans with @Qualifier
package com.logicbig.example.beans;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
public interface Account {
}
@Component
@Qualifier("basicAccount")
class SavingAccount implements Account {
@Override
public String toString() {
return "SavingAccount";
}
}
@Component
@Qualifier("basicAccount")
class CheckingAccount implements Account {
@Override
public String toString() {
return "CheckInAccount";
}
}
@Component
class FixedDepositAccount implements Account {
@Override
public String toString() {
return "FixedDepositAccount";
}
}
Injecting beans into Array with @Qualifier
package com.logicbig.example;
import com.logicbig.example.beans.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.Arrays;
@Configuration
@ComponentScan(basePackages = "com.logicbig.example.beans")
public class InjectingArrayOfBeansExample {
@Bean
public TestBean testBean(){
return new TestBean();
}
private static class TestBean {
@Autowired
@Qualifier("basicAccount")
private Account[] accounts;
@PostConstruct
public void init() {
System.out.println(Arrays.toString(accounts));
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(
InjectingArrayOfBeansExample.class);
}
}
Output[CheckInAccount, SavingAccount]
Injecting beans into List/Set with @Qualifier
package com.logicbig.example;
import com.logicbig.example.beans.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.List;
@Configuration
@ComponentScan(basePackages = "com.logicbig.example.beans")
public class InjectingListOfBeansExample {
@Bean
public TestBean testBean() {
return new TestBean();
}
private static class TestBean {
@Autowired
@Qualifier("basicAccount")
private List<Account> accounts;
@PostConstruct
public void init() {
System.out.println(accounts);
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(
InjectingListOfBeansExample.class);
}
}
Output[CheckInAccount, SavingAccount]
package com.logicbig.example;
import com.logicbig.example.beans.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.Set;
@Configuration
@ComponentScan(basePackages = "com.logicbig.example.beans")
public class InjectingSetOfBeansExample {
@Bean
public TestBean testBean() {
return new TestBean();
}
private static class TestBean {
@Autowired
@Qualifier("basicAccount")
private Set<Account> accounts;
@PostConstruct
public void init() {
System.out.println(accounts);
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(
InjectingSetOfBeansExample.class);
}
}
Output[CheckInAccount, SavingAccount]
Injecting beans into Map with @Qualifier
package com.logicbig.example;
import com.logicbig.example.beans.Account;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.Map;
@Configuration
@ComponentScan(basePackages = "com.logicbig.example.beans")
public class InjectingMapOfBeansExample {
@Bean
public TestBean testBean() {
return new TestBean();
}
private static class TestBean {
@Autowired
@Qualifier("basicAccount")
private Map<String, Account> accounts;
@PostConstruct
public void init() {
System.out.println(accounts);
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(
InjectingMapOfBeansExample.class);
}
}
Output{checkingAccount=CheckInAccount, savingAccount=SavingAccount}
Example ProjectDependencies and Technologies Used: - spring-context 6.1.2 (Spring Context)
Version Compatibility: 4.3.0.RELEASE - 6.1.2 Version compatibilities of spring-context with this example: Versions in green have been tested.
- jakarta.jakartaee-api 10.0.0 (Eclipse Foundation)
- JDK 17
- Maven 3.8.1
|