Friday, 26 October 2018

Spring Bean Java Config Example | Spring JavaConfig example | Spring Tutorial

Master Spring Framework & Java!

Subscribe to Ram N Java for clean, hands-on tutorials on core enterprise Java development.

👉 Subscribe Now on YouTube

Spring JavaConfig: XML vs Java Configuration

Traditionally, Spring developers defined bean definitions and dependencies inside XML configuration files (like applicationContext.xml). With Spring JavaConfig, you can define your beans directly in pure Java classes using annotations, giving you full type safety, refactoring support, and compile-time verification.

1. Replacing XML Bean Definitions with @Configuration & @Bean

In XML-based configuration, a bean is typically registered using:

<bean id="helloBean" class="com.ram.HelloWorldImpl" />

With JavaConfig, you can replace the XML file completely with an annotated class:

  • @Configuration: Indicates that the class declares one or more @Bean methods and may be processed by the Spring IoC container to generate bean definitions.
  • @Bean: Marks a method that instantiates, configures, and initializes a new object to be managed by the Spring container. The method name serves as the bean ID by default.

2. Step-by-Step Code Structure

Setting up a clean JavaConfig example involves three simple components:

  1. Interface & Implementation: Create an interface HelloWorld with a method like printHelloWorld(), and implement it in HelloWorldImpl.
  2. Configuration Class: Create AppConfig annotated with @Configuration. Inside, create a method named helloBean() annotated with @Bean returning a new instance of HelloWorldImpl.
  3. Bootstrap Application Context: Instead of loading XML, bootstrap your container using AnnotationConfigApplicationContext by passing the configuration class:
    ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

3. Advantages of Spring JavaConfig

  • Type Safety: Bean wiring is checked at compile-time rather than runtime.
  • Refactoring Friendly: Renaming classes or methods automatically updates bean definitions across your IDE.
  • Clean Architecture: Eliminates bloated XML files and keeps configuration cleanly organized in standard Java code.

Recommended Related Videos from Ram N Java

Continue your Spring JavaConfig journey with these related tutorials:


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

Click the below Image to Enlarge:

Spring Bean Java Config Example | Spring JavaConfig example | Spring Tutorial

Spring Bean Java Config Example | Spring JavaConfig example | Spring Tutorial

Spring Bean Java Config Example | Spring JavaConfig example | Spring Tutorial

Spring Bean Java Config Example | Spring JavaConfig example | 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>SpringHelloWorld</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>SpringHelloWorld</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>

HelloWorld.java

package com.ram.hello;

public interface HelloWorld
{
    public void printHelloWorld(String msg);
}

HelloWorldImpl.java

package com.ram.hello.impl;

import com.ram.hello.HelloWorld;

public class HelloWorldImpl implements HelloWorld
{

    public void printHelloWorld(String msg)
    {
        System.out.println("Hello : " + msg);
    }

}

AppConfig.java

package com.ram.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.ram.hello.HelloWorld;
import com.ram.hello.impl.HelloWorldImpl;

/**
 * Annotate with @Configuration to tell Spring that this is the core
 * Spring configuration file, and define bean via @Bean.
 */

@Configuration
public class AppConfig
{

    @Bean(name = "helloBean")
    public HelloWorld helloWorld()
    {
        return new HelloWorldImpl();
    }

}

App.java

package com.ram.core;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.ram.config.AppConfig;
import com.ram.hello.HelloWorld;

public class App
{
    public static void main(String[] args)
    {
        /*
         * Load the JavaConfig class with
         * AnnotationConfigApplicationContext.
         */

        ApplicationContext context = new AnnotationConfigApplicationContext(
                AppConfig.class);
        HelloWorld helloWorldImplObj = (HelloWorld) context.getBean("helloBean");
        helloWorldImplObj.printHelloWorld("Spring5 Hello world");

    }
}

Output

Sep 29, 2018 10:13:18 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5f4da5c3: startup date [Sat Sep 29 10:13:18 IST 2018]; root of context hierarchy
Hello : Spring5 Hello world

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

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

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