Friday, 13 April 2018

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

🚀 Master Spring & Java with Ram N Java!

Want more crystal-clear coding tutorials? Join our community today and never miss a deep dive!

SUBSCRIBE NOW (FREE)

What is the Spring IoC Container?

In the world of Java development, the Spring Framework is famous for making complex things simple. At the very heart of Spring is the IoC (Inversion of Control) Container. If you want to build professional Java applications, understanding this container is the first and most important step!

1. Understanding Inversion of Control (IoC)

Before Spring, developers had to manually create objects and manage their relationships. With Inversion of Control, we "invert" that responsibility. Instead of you creating the objects, you let the Spring Container do it for you. You simply tell Spring what you need, and it takes care of the "how" and "when."

2. What Does the Container Actually Do?

The IoC Container is like a high-end management system for your Java objects (which Spring calls "Beans"). Its main jobs are:

  • Instantiating Beans: Creating the objects for you.
  • Configuring Beans: Setting up the initial values they need.
  • Assembling Beans: Connecting different objects together so they can work as a team (Dependency Injection).
  • Managing the Life Cycle: Handling everything from the moment a bean is created until it's destroyed.

3. The Two Main Types of Containers

Spring provides two different implementations of the IoC container:

  • BeanFactory: The simplest container, perfect for lightweight applications.
  • ApplicationContext: A more advanced container built on top of BeanFactory. It adds professional features like internationalization, event propagation, and easy integration with AOP.

4. Why Should You Care?

Using the IoC container makes your code cleaner, more flexible, and easier to test. Since your classes don't need to know how to create their own dependencies, they become much easier to manage. This is the "magic" that allows Spring applications to scale so effectively!


Click here to watch on Youtube: 
https://www.youtube.com/watch?v=3K-uPe9SZLc&list=UUhwKlOVR041tngjerWxVccw

Click the below Image to Enlarge:
What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

What is IoC Container in Spring?_V1 | What is Spring IoC Container? | Spring Tutorial

Maven Command.txt

Compile:

mvn clean compile

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.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import com.ram.model.Employee;

public class App
{
    public static void main(String[] args)
    {
        usingBeanFactory();
        usingApplicationContext();

    }

    private static void usingBeanFactory()
    {
        System.out.println("************* Using BeanFactory ************* ");
        Resource resource = new ClassPathResource("applicationContext.xml");
        BeanFactory factory = new XmlBeanFactory(resource);

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

        Employee employee = (Employee) factory.getBean("employee");
        System.out.println(
                "Got employee object from the BeanFactory(Spring Container)");
        employee.employeeDetails();
    }

    private static void usingApplicationContext()
    {
        System.out.println("\n************* Using ApplicationContext ******* ");
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");

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

        Employee employee = (Employee) context.getBean("employee");
        System.out.println(
                "Got employee object from the ApplicationContext(Spring Container)");
        employee.employeeDetails();
    }
}

Output.txt

************* Using BeanFactory *************
Apr 05, 2018 9:44:21 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

************* Using ApplicationContext *******
Apr 05, 2018 9:44:22 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@26ba2a48: startup date [Thu Apr 05 09:44:22 IST 2018]; root of context hierarchy
Apr 05, 2018 9:44:22 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

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

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

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

See also:

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

    Post a Comment

    Tutorials