Close

Spring - Arrays and Collections As Beans

[Last Updated: Dec 22, 2023]

Spring XML based configuration defined elements like <list/>, <set/>, <map/>, and <props/>. The purpose of these elements was to map XML based configuration to Java arrays and collection. Since the addition of JavaConfig, we don't require that kind of custom mappings because new configuration is itself in Java language, so we can directly define beans of Array and Collections.

Examples

Bean of Array

package com.logicbig.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.Arrays;

@Configuration
public class ArraysAsBeanExample {

    @Bean
    public String[] fruits() {
        return new String[]{"apple", "banana", "orange"};
    }

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }

    private static class TestBean {
        @Autowired
        private String[] fruits;

        @PostConstruct
        public void postConstruct() {
            System.out.println(Arrays.toString(fruits));
        }
    }

    public static void main(String[] args) {
        new AnnotationConfigApplicationContext(
                ArraysAsBeanExample.class);
    }
}

Output

[apple, banana, orange]

Bean of List

package com.logicbig.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.Arrays;
import java.util.List;

@Configuration
public class ListAsBeanExample {

    @Bean
    public List<String> fruits() {
        return Arrays.asList("apple", "banana", "orange");
    }

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }

    private static class TestBean {
        @Autowired
        private List<String> fruits;

        @PostConstruct
        public void postConstruct() {
            System.out.println(fruits);
        }
    }

    public static void main(String[] args) {
        new AnnotationConfigApplicationContext(
                ListAsBeanExample.class);
    }
}

Output

[apple, banana, orange]

Bean of Set

package com.logicbig.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

@Configuration
public class SetAsBeanExample {

    @Bean
    public Set<String> fruits() {
        return new HashSet<>(Arrays.asList("apple", "banana", "orange"));
    }

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }

    private static class TestBean {
        @Autowired
        private Set<String> fruits;

        @PostConstruct
        public void postConstruct() {
            System.out.println(fruits);
        }
    }

    public static void main(String[] args) {
        new AnnotationConfigApplicationContext(
                SetAsBeanExample.class);
    }
}

Output

[banana, orange, apple]

Bean of Map

package com.logicbig.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class MapAsBeanExample {

    @Bean
    public HashMap<String, String> fruits() {
        HashMap<String, String> map = new HashMap<>();
        map.put("apple", "every morning");
        map.put("banana", "after lunch");
        map.put("orange", "every evening");
        return map;
    }

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }

    private static class TestBean {
        @Autowired
        private Map<String, String> fruits;

        @PostConstruct
        public void postConstruct() {
            System.out.println(fruits);
        }
    }

    public static void main(String[] args) {
        new AnnotationConfigApplicationContext(
                MapAsBeanExample.class);
    }
}

Output

{banana=after lunch, orange=every evening, apple=every morning}

Bean of User Object List

package com.logicbig.example;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import jakarta.annotation.PostConstruct;
import java.util.Arrays;
import java.util.List;

@Configuration
public class ObjectListAsBeanExample {

    @Bean
    public List<Fruit> fruits() {
        return Arrays.asList(
                new Fruit("apple", "every morning"),
                new Fruit("banana", "after lunch"),
                new Fruit("orange", "every evening")
        );
    }

    @Bean
    public TestBean testBean() {
        return new TestBean();
    }

    private static class TestBean {
        @Autowired
        private List<Fruit> fruits;

        @PostConstruct
        public void postConstruct() {
            System.out.println(fruits);
        }
    }

    private static class Fruit {
        private String name;
        private String whenToEat;

        public Fruit(String name, String whenToEat) {
            this.name = name;
            this.whenToEat = whenToEat;
        }

        @Override
        public String toString() {
            return "Fruit{" +
                    "name='" + name + '\'' +
                    ", whenToEat='" + whenToEat + '\'' +
                    '}';
        }
    }

    public static void main(String[] args) {
        new AnnotationConfigApplicationContext(
                ObjectListAsBeanExample.class);
    }
}

Output

[Fruit{name='apple', whenToEat='every morning'}, Fruit{name='banana', whenToEat='after lunch'}, Fruit{name='orange', whenToEat='every evening'}]

Example Project

Dependencies and Technologies Used:

  • spring-context 6.1.2 (Spring Context)
     Version Compatibility: 4.3.0.RELEASE - 6.1.2Version List
    ×

    Version compatibilities of spring-context with this example:

    • 4.3.0.RELEASE
    • 4.3.1.RELEASE
    • 4.3.2.RELEASE
    • 4.3.3.RELEASE
    • 4.3.4.RELEASE
    • 4.3.5.RELEASE
    • 4.3.6.RELEASE
    • 4.3.7.RELEASE
    • 4.3.8.RELEASE
    • 4.3.9.RELEASE
    • 4.3.10.RELEASE
    • 4.3.11.RELEASE
    • 4.3.12.RELEASE
    • 4.3.13.RELEASE
    • 4.3.14.RELEASE
    • 4.3.15.RELEASE
    • 4.3.16.RELEASE
    • 4.3.17.RELEASE
    • 4.3.18.RELEASE
    • 4.3.19.RELEASE
    • 4.3.20.RELEASE
    • 4.3.21.RELEASE
    • 4.3.22.RELEASE
    • 4.3.23.RELEASE
    • 4.3.24.RELEASE
    • 4.3.25.RELEASE
    • 4.3.26.RELEASE
    • 4.3.27.RELEASE
    • 4.3.28.RELEASE
    • 4.3.29.RELEASE
    • 4.3.30.RELEASE
    • 5.0.0.RELEASE
    • 5.0.1.RELEASE
    • 5.0.2.RELEASE
    • 5.0.3.RELEASE
    • 5.0.4.RELEASE
    • 5.0.5.RELEASE
    • 5.0.6.RELEASE
    • 5.0.7.RELEASE
    • 5.0.8.RELEASE
    • 5.0.9.RELEASE
    • 5.0.10.RELEASE
    • 5.0.11.RELEASE
    • 5.0.12.RELEASE
    • 5.0.13.RELEASE
    • 5.0.14.RELEASE
    • 5.0.15.RELEASE
    • 5.0.16.RELEASE
    • 5.0.17.RELEASE
    • 5.0.18.RELEASE
    • 5.0.19.RELEASE
    • 5.0.20.RELEASE
    • 5.1.0.RELEASE
    • 5.1.1.RELEASE
    • 5.1.2.RELEASE
    • 5.1.3.RELEASE
    • 5.1.4.RELEASE
    • 5.1.5.RELEASE
    • 5.1.6.RELEASE
    • 5.1.7.RELEASE
    • 5.1.8.RELEASE
    • 5.1.9.RELEASE
    • 5.1.10.RELEASE
    • 5.1.11.RELEASE
    • 5.1.12.RELEASE
    • 5.1.13.RELEASE
    • 5.1.14.RELEASE
    • 5.1.15.RELEASE
    • 5.1.16.RELEASE
    • 5.1.17.RELEASE
    • 5.1.18.RELEASE
    • 5.1.19.RELEASE
    • 5.1.20.RELEASE
    • 5.2.0.RELEASE
    • 5.2.1.RELEASE
    • 5.2.2.RELEASE
    • 5.2.3.RELEASE
    • 5.2.4.RELEASE
    • 5.2.5.RELEASE
    • 5.2.6.RELEASE
    • 5.2.7.RELEASE
    • 5.2.8.RELEASE
    • 5.2.9.RELEASE
    • 5.2.10.RELEASE
    • 5.2.11.RELEASE
    • 5.2.12.RELEASE
    • 5.2.13.RELEASE
    • 5.2.14.RELEASE
    • 5.2.15.RELEASE
    • 5.2.16.RELEASE
    • 5.2.17.RELEASE
    • 5.2.18.RELEASE
    • 5.2.19.RELEASE
    • 5.2.20.RELEASE
    • 5.2.21.RELEASE
    • 5.2.22.RELEASE
    • 5.2.23.RELEASE
    • 5.2.24.RELEASE
    • 5.2.25.RELEASE
    • 5.3.0
    • 5.3.1
    • 5.3.2
    • 5.3.3
    • 5.3.4
    • 5.3.5
    • 5.3.6
    • 5.3.7
    • 5.3.8
    • 5.3.9
    • 5.3.10
    • 5.3.11
    • 5.3.12
    • 5.3.13
    • 5.3.14
    • 5.3.15
    • 5.3.16
    • 5.3.17
    • 5.3.18
    • 5.3.19
    • 5.3.20
    • 5.3.21
    • 5.3.22
    • 5.3.23
    • 5.3.24
    • 5.3.25
    • 5.3.26
    • 5.3.27
    • 5.3.28
    • 5.3.29
    • 5.3.30
    • 5.3.31
    • Compatible Java Version: 17+
    • 6.0.0
    • 6.0.1
    • 6.0.2
    • 6.0.3
    • 6.0.4
    • 6.0.5
    • 6.0.6
    • 6.0.7
    • 6.0.8
    • 6.0.9
    • 6.0.10
    • 6.0.11
    • 6.0.12
    • 6.0.13
    • 6.0.14
    • 6.0.15
    • 6.1.0
    • 6.1.1
    • 6.1.2

    Versions in green have been tested.

  • jakarta.jakartaee-api 10.0.0 (Eclipse Foundation)
  • JDK 17
  • Maven 3.8.1

Creating Beans of Arrays and Collections Select All Download
  • spring-arrays-collections-as-beans
    • src
      • main
        • java
          • com
            • logicbig
              • example
                • ArraysAsBeanExample.java

    See Also