Thursday, 24 May 2018

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

🚀 Master Spring & Java with Ram N Java!

Want to stay ahead in your coding career? Join our community today for the best Java and Spring tutorials!

SUBSCRIBE FOR FREE

What is the Spring IoC Container?

If you're diving into the Spring Framework, the term "IoC Container" will come up almost immediately. It is the core engine that powers every Spring application. But what does it actually do? Let's demystify it in simple terms!

1. The Core Definition

The IoC (Inversion of Control) Container is a specialized management system for your Java objects (known as Beans). Its primary responsibility is to create objects, wire them together, configure them, and manage their complete life cycle from creation to destruction.

2. How Does It Work?

The container gets its instructions from Configuration Metadata. This metadata can be provided in three ways: XML configuration files, Java Annotations, or Java-based code. The container reads these instructions and uses them to build a system of interconnected objects that form your application.

3. Why Use an IoC Container?

By using the container, you achieve Loose Coupling. Your classes no longer need to know how to create their own dependencies. They simply "ask" the container for what they need. This makes your code much easier to maintain, test, and update as your project grows.

4. Types of Spring Containers

There are two main types of containers in Spring:

  • BeanFactory: Provides basic support for Dependency Injection and bean management.
  • ApplicationContext: A more advanced container that adds enterprise-level features like internationalization and event handling.

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

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

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

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

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

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

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

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

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

What is IoC Container in Spring?_V2 | 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

************* 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_V2.zip?attredirects=0&d=1

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

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