Thursday, 24 May 2018

How to use ApplicationContext interface[IoC Container] methods? | Spring Tutorial | Spring Framework

Enjoying this Java & Spring tutorial?

Subscribe to Ram N Java on YouTube

Introduction

The ApplicationContext interface is the central interface to a Spring application. Acting as an advanced Inversion of Control (IoC) container, it extends BeanFactory and adds enterprise-level functionality including internationalization, event propagation, and resource loading.

In this guide, you will explore the essential methods provided by the ApplicationContext and BeanFactory interfaces to inspect, retrieve, and manage Spring beans dynamically.

Key ApplicationContext Methods

  • getBean(String name): Retrieves a bean instance using its registered bean ID or name.
  • getBean(Class<T> requiredType): Retrieves the unique bean instance matching the specified type.
  • containsBean(String name): Checks whether the Spring container contains a bean definition with the given name.
  • isSingleton(String name): Determines whether the bean is configured with singleton scope.
  • isPrototype(String name): Determines whether the bean is configured with prototype scope.
  • getType(String name): Finds the runtime Java type (Class<?>) of the specified bean.
  • getAliases(String name): Returns all aliases defined for the given bean name.

1. Create the Java Bean Class

Define a simple bean class (such as HelloWorld):

public class HelloWorld {
    private String message;

    public void setMessage(String message) {
        this.message = message;
    }

    public void sayHello() {
        System.out.println("Message: " + message);
    }
}
  

2. Define Spring XML Configuration (applicationContext.xml)

Declare the bean in your applicationContext.xml file and assign an alias to test alias-checking methods:

<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="helloWorldBean" class="HelloWorld" scope="singleton">
        <property name="message" value="Hello, Spring Container!" />
    </bean>

    <alias name="helloWorldBean" alias="greetingBean" />

</beans>
  

3. Test ApplicationContext Methods in Main Application

Bootstrap the container with ClassPathXmlApplicationContext and invoke the container inspection methods:

import java.util.Arrays;
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");

        // getBean
        HelloWorld hello = (HelloWorld) context.getBean("helloWorldBean");
        hello.sayHello();

        // containsBean
        boolean exists = context.containsBean("helloWorldBean");
        System.out.println("Contains helloWorldBean: " + exists);

        // isSingleton
        boolean isSingle = context.isSingleton("helloWorldBean");
        System.out.println("Is Singleton: " + isSingle);

        // getType
        Class<?> beanClass = context.getType("helloWorldBean");
        System.out.println("Bean Class Type: " + beanClass.getName());

        // getAliases
        String[] aliases = context.getAliases("helloWorldBean");
        System.out.println("Aliases: " + Arrays.toString(aliases));
    }
}
  

Watch More Spring Tutorials


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

Click the below Image to Enlarge:
How to use ApplicationContext interface[IoC Container] methods? | Spring Tutorial | Spring Framework
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>

Employee.java

package com.ram.model;

/**
 * Spring bean
 *
 */

public class Employee
{
    private String name;

    public void setName(String name)
    {
        this.name = name;
    }

    public void employeeDetails()
    {
        System.out.println("Employee Name =  " + name);
    }
}

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="employee" class="com.ram.model.Employee">
        <property name="name" value="Peter" />
    </bean>

</beans>

App.java

package com.ram.core;

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

import com.ram.model.Employee;

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

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

        // 1 st way of getting employee bean
        Object object = context.getBean("employee");
        Employee employee = (Employee) object;
        System.out.println(
                "Got employee object from the ApplicationContext(Spring Container)");
        employee.employeeDetails();

        // 2nd way of getting employee bean
        employee = context.getBean("employee", Employee.class);
        System.out.println(
                "\nGot employee object from the ApplicationContext(Spring Container)");
        employee.employeeDetails();

        // 3rd way of getting employee bean
        employee = context.getBean(Employee.class);
        System.out.println(
                "\nGot employee object from the ApplicationContext(Spring Container)");
        employee.employeeDetails();

        boolean result = context.containsBean("employee");
        System.out.println("\nis employee bean available? = " + result);

        boolean isSingleton = context.isSingleton("employee");
        System.out.println(
                "\nis employee bean Singleton[always return the same instance]? = "
                        + isSingleton);

        boolean isPrototype = context.isPrototype("employee");
        System.out.println(
                "\nis employee bean isPrototype[always return independent instances]? = "
                        + isPrototype);

        String displayName = context.getDisplayName();
        System.out.println("\ndisplayName = " + displayName);

    }

}

Output

Apr 08, 2018 9:20:49 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2096442d: startup date [Sun Apr 08 09:20:49 IST 2018]; root of context hierarchy
Apr 08, 2018 9:20:51 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Got employee object from the ApplicationContext(Spring Container)
Employee Name =  Peter

Got employee object from the ApplicationContext(Spring Container)
Employee Name =  Peter

Got employee object from the ApplicationContext(Spring Container)
Employee Name =  Peter

is employee bean available? = true

is employee bean Singleton[always return the same instance]? = true

is employee bean isPrototype[always return independent instances]? = false

displayName = org.springframework.context.support.ClassPathXmlApplicationContext@2096442d

Refer:
https://docs.spring.io/spring-framework/docs/current/javadoc-api/index.html?org/springframework/context/ApplicationContext.html

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

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

Bitbucket Link:
https://bitbucket.org/ramram43210/spring/src/a1d5b66cf948298a0bb7c33e9b2c0967275f5a95/Spring_2018/SpringDemo_ApplicationContext/?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