This example shows how to inject multiple beans into Arrays and Collections.
Examples
Beans
package com.logicbig.example.beans;
import org.springframework.stereotype.Component;
public interface Account {
}
@Component
class SavingAccount implements Account {
@Override
public String toString() {
return "SavingAccount";
}
}
@Component
class CheckingAccount implements Account {
@Override
public String toString() {
return "CheckInAccount";
}
}
@Component
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.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
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, FixedDepositAccount, SavingAccount]
Injecting beans into List
package com.logicbig.example;
import com.logicbig.example.beans.Account;
import org.springframework.beans.factory.annotation.Autowired;
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
private List<Account> accounts;
@PostConstruct
public void init() {
System.out.println(accounts);
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(
InjectingListOfBeansExample.class);
}
}
Output[CheckInAccount, FixedDepositAccount, SavingAccount]
Injecting beans into Set
package com.logicbig.example;
import com.logicbig.example.beans.Account;
import org.springframework.beans.factory.annotation.Autowired;
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
private Set<Account> accounts;
@PostConstruct
public void init() {
System.out.println(accounts);
}
}
public static void main(String[] args) {
new AnnotationConfigApplicationContext(
InjectingSetOfBeansExample.class);
}
}
Output[CheckInAccount, FixedDepositAccount, SavingAccount]
Injecting beans into Map
In this case the Map's keys will contain the corresponding bean names and the Map's values will be beans instances.
package com.logicbig.example;
import com.logicbig.example.beans.Account;
import org.springframework.beans.factory.annotation.Autowired;
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
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, fixedDepositAccount=FixedDepositAccount, 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
|