Spring – Beans using @Bean
Spring – Beans using @Bean
We have previously discussed an example of Spring configuration using an XML-based configuration. In the previous example, we have defined beans inside the bean-configuration file (applicationContext.xml). To make the code easier and understandable, we are going to use @Bean annotation (annotation-based configuration) for configuring Spring applications.
@Bean – The @Bean is a method level annotation. It tells the Spring container that the annotated method will return a bean. To define a bean, annotate a method with @Bean annotation. The method name must be the same as the bean name. It also supports several attributes provided by the <bean> tag such as init-method, destroy-method, dependency, and autowiring.
Let’s understand the concept of @Bean annotation through an example.
Example of Spring beans using @Bean annotation
Here, we are going to create an example of Spring beans using @Bean annotation. The Fortune.java and Coach.java are the two interfaces that contain the unimplemented methods, and GoodLuckFortune.java and Cricket_Coach.java are the Java classes that implement the Fortune and Coach interface, respectively. The class AppConfig.java is a Java-based configuration class that contains the bean information.
Following are the steps to create an example of Spring beans using @Bean:
- Create an Interface
In this step, we are going to create an interface named Fortune.java.
Fortune.java
public interface Fortune {
public String getDailyFortune();
}
- Create a Java class
In this step, we are going to create a class named GoodLuckFortune.java that implements the Fortune interface.
GoodLuckFortune.java
import org.springframework.stereotype.Component;
@Component
public class GoodLuckFortune implements Fortune{
public String getDailyFortune() {
return "Goodluck For today..!!" ;
}
}
- Create another Interface
In this step, we are going to create another interface named Coach.java.
Coach.java
public interface Coach {
public String getDailyTraining();
public String getFortuneService();
}
- Create another Java class
In this step, we are going to create another Java class named Cricket_Coach.java that implements the Coach interface.
Cricket_Coach.java
import org.springframework.stereotype.Component;
@Component
public class Cricket_Coach implements Coach {
private Fortune fortuneService;
public Cricket_Coach(Fortune fortuneService) {
this.fortuneService = fortuneService;
}
public String getDailyTraining() {
return "Daily 5 hours of running..!" ;
}
public String getFortuneService() {
return fortuneService.getDailyFortune() ;
}
}
- Create the Configuration class
In this step, we are going to create the configuration class named AppConfig.java.
AppConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan( "com.app.SpringBean_usingBean" )
public class AppConfig {
// defining bean for GoodLuckFortune class
@Bean
public Fortune goodLuckFortune() {
return new GoodLuckFortune();
}
//defining bean for Cricket_Coach class
@Bean
public Coach cricket_Coach() {
return new Cricket_Coach(goodLuckFortune());
}
}
In the AppConfig.java file, we have declared the bean classes, one is GoodLuckFortune, and the other is Cricket_Coach. The bean name and the method name (on which @Bean is defined) are must be the same as defined in the above code.
- Create the main class
In this step, we are going the main class named App.java.
App.java
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class App
{
public static void main( String[] args )
{
AnnotationConfigApplicationContext appcontext = new AnnotationConfigApplicationContext(AppConfig.class);
Coach newCoach = appcontext.getBean("cricket_Coach", Coach.class);
System.out.println(newCoach.getDailyTraining());
System.out.println(newCoach.getFortuneService());
appcontext.close();
}
}
Output

