Hey guys in this post we will discuss everything you need to know about Spring boot @Bean
annotation with example.
Table of Contents
Overview
@Bean
is used to explicitly declare a single bean, rather than letting Spring do it automatically. It decouples the declaration of the bean from the class definition and lets you create and configure beans exactly how you choose.
@Bean
is a method-level annotation. We generally use it to configure beans in Java code (if you are not using XML configuration) and then call it from a class using the ApplicationContext.getBean()
method.
@Configuration
class MyConfiguration{
@Bean
public User getUser() {
return new User();
}
}
class User{
}
// Getting Bean
User user = applicationContext.getBean("getUser");
The @Bean
annotation returns an object that spring should register as a bean in the application context. The body of the method bears the logic responsible for creating the instance.
Watch the video
Example on @Bean annotation
The best way to understand @Bean
annotation is by looking at the complete example by creating a spring application.
Create Spring boot project
There are different ways to create a spring boot project, you can follow the below articles to create one –
>> Create spring boot application using Spring initializer
>> Create spring boot application in Spring tool suite [STS]
>> Create spring boot application in IntelliJ IDEA
Add maven dependencies
Open pom.xml
and add the following dependencies
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>in.bushansirgur</groupId>
<artifactId>beanannotation</artifactId>
<version>v1</version>
<name>beanannotation</name>
<description>Spring boot bean annotation</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
spring-boot-starter-web
dependency for building web applications using Spring MVC. It uses the tomcat as the default embedded container.
spring-boot-devtools
dependency for automatic reloads or live reload of applications.
Create an entity
Create User.java
inside in.bushansirgur.springboot.entity
package and add the following content
package in.bushansirgur.springboot.entity;
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [name=" + name + "]";
}
}
Create a service
Create UserService.java
inside in.bushansirgur.springboot.service
package and add the following content
package in.bushansirgur.springboot.service;
import java.util.ArrayList;
import java.util.List;
import in.bushansirgur.springboot.entity.User;
public class UserService {
private static List list = new ArrayList<>();
static {
User u = new User("User 1");
list.add(u);
u = new User("User 2");
list.add(u);
u = new User("User 3");
list.add(u);
}
public List getList () {
return list;
}
}
Create a configuration class
Create MyConfig.java
inside in.bushansirgur.springboot.config
package and add the following content
package in.bushansirgur.springboot.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import in.bushansirgur.springboot.service.UserService;
@Configuration
public class MyConfig {
@Bean(name={"myBean", "mySecondBean"})
public UserService getUser() {
return new UserService();
}
}
@Configuration
annotation tells Spring container that there are one or more beans that need to be dealt with on runtime.
@Bean
takes optional element name
which is an array, we can multiple alias name with comma separated.
Create the main class
Open BeanannotationApplication.java
and the following content
package in.bushansirgur.springboot;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import in.bushansirgur.springboot.service.UserService;
@SpringBootApplication
public class BeanannotationApplication{
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanannotationApplication.class);
//By its type
UserService user = ctx.getBean(UserService.class);
System.out.println("Printing user:"+user.getList());
}
}
Get Bean by its alias name
We can also get the bean by its alias name. getBean()
accepts the alias name, and we need to typecast it to the bean type.
package in.bushansirgur.springboot;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import in.bushansirgur.springboot.service.UserService;
@SpringBootApplication
public class BeanannotationApplication{
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanannotationApplication.class);
//By its alias name
UserService user = (UserService)ctx.getBean("myBean");
System.out.println("Printing user:"+user.getList());
}
}
run the app
mvn spring-boot:run
Output:
Printing user:[User [name=User 1], User [name=User 2], User [name=User 3]]
Hello Sir,
In this example you’ve not share the full details of running program with Postman used.
Please Update it with Proper Explanation.
Thanks and Regards,
Vishal Kumar