Showing posts with label BeanFactory. Show all posts
Showing posts with label BeanFactory. Show all posts

Thursday, 24 May 2018

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

Enjoying this Java & Spring tutorial?

Subscribe to Ram N Java on YouTube

Introduction

In the Spring Framework, the BeanFactory interface is the root interface for accessing the Spring Inversion of Control (IoC) container. It provides the core configuration and basic functionality needed to manage beans and resolve dependencies.

In this tutorial, you will explore the essential methods defined in the BeanFactory interface to inspect, retrieve, and manage Spring beans programmatically.

Key BeanFactory Methods

  • getBean(String name): Returns an instance of the bean matching the given name or ID.
  • getBean(Class<T> requiredType): Returns the bean instance that uniquely matches the given object type.
  • containsBean(String name): Checks if the container holds a bean definition or instance with the provided name.
  • isSingleton(String name): Determines whether the bean is configured as a shared singleton.
  • isPrototype(String name): Checks whether the bean is configured to return an independent instance each time.
  • getType(String name): Identifies the runtime target type of the bean.
  • getAliases(String name): Returns an array of aliases defined for the given bean name.

1. Create the Java Bean Class

Define a standard bean class (for example, HelloWorld):

public class HelloWorld {
    private String message;

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

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

2. Configure Spring XML (applicationContext.xml)

Declare the bean and configure an alias in your applicationContext.xml file:

<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 BeanFactory!" />
    </bean>

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

</beans>
  

3. Test BeanFactory Methods

Initialize the container using XmlBeanFactory with ClassPathResource (or through ApplicationContext which implements BeanFactory) and test the methods:

import java.util.Arrays;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

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

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

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

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

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

        // getAliases
        String[] aliases = factory.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=pJc8ofUHOw4&list=UUhwKlOVR041tngjerWxVccw

Click the below Image to Enlarge:
How to use BeanFactory interface[IoC Container] methods? | Spring Tutorial | Spring Framework

How to use BeanFactory 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.core;

/**
 * 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.core.Employee">
        <property name="name" value="Peter" />
    </bean>

</beans>

App.java

package com.ram.core;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class App
{
    public static void main(String[] args)
    {
        Resource resource = new ClassPathResource("applicationContext.xml");
        BeanFactory factory = new XmlBeanFactory(resource);

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

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

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

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

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

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

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

    }

}

Output

Apr 07, 2018 10:14:54 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
---------------------------------------
Got employee object from the BeanFactory(Spring Container)
Employee Name =  Peter

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

Got employee object from the BeanFactory(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

Refer:

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

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

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