This example uses both @Qualifier and @Order at a time.
Example
Beans
package com.logicbig.example.beans;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
public interface Account {
}
@Component
@Order(1)
@Qualifier("basicAccount")
class SavingAccount implements Account {
@Override
public String toString() {
return "SavingAccount";
}
}
@Component
@Order(3)
@Qualifier("basicAccount")
class CheckingAccount implements Account {
@Override
public String toString() {
return "CheckInAccount";
}
}
@Component
@Order(2)
class FixedDepositAccount implements Account {
@Override
public String toString() {
return "FixedDepositAccount";
}
}
Injecting beans into Arrays
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[SavingAccount, CheckInAccount]
Injecting beans into List
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}
Injecting beans into Set
Sets ignore the ordering specified by @Ordered annotations.
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
Maps also ignore ordering.
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}
Summary
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
|