Friday, 1 June 2018

How to Inject Array of String using Spring dependency injection by constructor? | Spring Tutorial

Enjoying this Java & Spring tutorial?

Subscribe to Ram N Java on YouTube

Introduction

When developing Spring applications, you frequently encounter requirements where a bean needs a collection or array of basic values such as strings. Spring makes it simple to inject arrays directly through the constructor.

In this guide, you will learn how to configure and inject a String Array (String[]) using constructor dependency injection in your Spring XML configuration.

1. Create the Java Bean Class

Create a class named FruitShop that has an array of strings (e.g., fruitsName) and a constructor to receive it:

import java.util.Arrays;

public class FruitShop {
    private String shopName;
    private String[] fruitsName;

    public FruitShop(String shopName, String[] fruitsName) {
        this.shopName = shopName;
        this.fruitsName = fruitsName;
    }

    public void displayFruitShopInfo() {
        System.out.println("Shop Name: " + shopName);
        System.out.println("Fruits: " + Arrays.toString(fruitsName));
    }
}
  

2. Configure Spring XML with <array>

In your Spring configuration file (applicationContext.xml), define the bean and pass the array elements using the <array> and <value> tags:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="fruitShop" class="FruitShop">
        <constructor-arg value="Daily Fresh Fruit Mart" />
        <constructor-arg>
            <array value-type="java.lang.String">
                <value>Apple</value>
                <value>Orange</value>
                <value>Banana</value>
                <value>Mango</value>
            </array>
        </constructor-arg>
    </bean>

</beans>
  

3. Load ApplicationContext and Execute

Finally, initialize the Spring container, fetch the configured bean, and invoke the method to verify the array injection:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        FruitShop shop = (FruitShop) context.getBean("fruitShop");
        shop.displayFruitShopInfo();
    }
}
  

Watch More Spring Tutorials


Click here to watch on Youtube:
https://www.youtube.com/watch?v=BCKn42YRxJg&list=UUhwKlOVR041tngjerWxVccw

Click the below Image to Enlarge:

How to Inject Array of String using Spring dependency injection by constructor? | Spring Tutorial

How to Inject Array of String using Spring dependency injection by constructor? | Spring Tutorial

How to Inject Array of String using Spring dependency injection by constructor? | Spring Tutorial

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0%20http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ram.core</groupId>
    <artifactId>SpringDemo</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>SpringDemo</name>
    <url>http://maven.apache.org</url>

    <properties>
        <spring.version>5.0.2.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <!-- Spring 5 dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</project>

FruitShop.java

package com.ram.core;

import java.util.Arrays;

public class FruitShop
{
    private String shopName;
    private String[] fruitsArray;

    public FruitShop(String shopName, String[] fruitsArray)
    {
        System.out.println(
                "public FruitShop(String shopName, String[] fruitsArray) "
                        + "constructor is called by the Spring container");
        this.shopName = shopName;
        this.fruitsArray = fruitsArray;
    }

    public void displayFruitShopInfo()
    {
        System.out.println("FruitShop [shopName=" + shopName + ", fruitsArray="
                + Arrays.toString(fruitsArray) + "]");
    }

}

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd"
>

    <bean id="fruitShop" class="com.ram.core.FruitShop">

        <constructor-arg type="String" value="Fruit Mart"></constructor-arg>
        <constructor-arg>
            <array>
                <value>apple</value>
                <value>pineapple</value>
                <value>orange</value>
            </array>
        </constructor-arg>

    </bean>

</beans>

App.java

package com.ram.core;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App
{
    public static void main(String[] args)
    {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");

        System.out.println("---------------------------------------");

        FruitShop fruitShop = (FruitShop) context.getBean("fruitShop");
        System.out.println(
                "Got fruitShop object from the ApplicationContext(Spring Container)");
        fruitShop.displayFruitShopInfo();

    }

}

Output

May 01, 2018 9:05:59 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5b37e0d2: startup date [Tue May 01 09:05:59 IST 2018]; root of context hierarchy
May 01, 2018 9:06:00 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
public FruitShop(String shopName, String[] fruitsArray) constructor is called by the Spring container
---------------------------------------
Got fruitShop object from the ApplicationContext(Spring Container)
FruitShop [shopName=Fruit Mart, fruitsArray=[apple, pineapple, orange]]

Click the below link to download the code:
https://sites.google.com/site/ramj2eev2/java_basics/SpringDemo_DI_Array_String.zip?attredirects=0&d=1

Github Link:
https://github.com/ramram43210/javaee/tree/master/Spring_2018/SpringDemo_DI_Array_String

Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/a1d5b66cf948298a0bb7c33e9b2c0967275f5a95/Spring_2018/SpringDemo_DI_Array_String/?at=master

See also:
  • All JavaEE Videos Playlist
  • All JavaEE Videos
  • All JAVA EE Links
  • Spring Tutorial
  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • Java Collection Framework Tutorial
  • JAVA Tutorial
  • Kids Tutorial
  • Cooking Tutorial
  • No comments:

    Post a Comment

    Tutorials