Master Spring Framework & Java!
Subscribe to Ram N Java for clean, hands-on tutorials on core enterprise Java development.
👉 Subscribe Now on YouTubeSpring 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
@Beanmethods 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:
-
Interface & Implementation: Create an interface
HelloWorldwith a method likeprintHelloWorld(), and implement it inHelloWorldImpl. -
Configuration Class: Create
AppConfigannotated with@Configuration. Inside, create a method namedhelloBean()annotated with@Beanreturning a new instance ofHelloWorldImpl. -
Bootstrap Application Context: Instead of loading XML, bootstrap your container using
AnnotationConfigApplicationContextby 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 |
<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>
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
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);
}
}
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();
}
}
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");
}
}
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
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:
No comments:
Post a Comment