package example.micronaut;
public interface Greeter {
String greet();
}
Mark a class as a bean.- Spring Boot
This guide compares how to mark a class as a bean in a Spring Boot application with @Component vs. in a Micronaut application with @Singleton.
Authors: Sergio del Amo
Micronaut Version: 4.9.1
1. Sample Project
You can download a sample application with the code examples shown in this article.
2. Introduction
Both Spring and Micronaut frameworks are dependency injection engines. In this tutorial, we create a bean by "marking" a class as a bean.
3. An Interface
With an interface such as:
We want to be able to inject a bean of the type Greeter into our application.
4. Spring Boot @Component
In Spring, we can create an implementation and annotate it with @Component.
package example.micronaut;
import org.springframework.stereotype.Component;
@Component (1)
public class HelloGreeter implements Greeter {
@Override
public String greet() {
return "Hello";
}
}
| 1 | The @Component annotation indicates that the annotated class is a component. |
4.1. Spring Boot Test
The following test verify it is possible to inject a bean of type Greeter in a Spring Boot application.
package example.micronaut;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest (1)
class GreeterTest {
@Autowired (2)
Greeter greeter;
@Test
void helloGreeterIsInjectedAsBeanOfTypeGreeter() {
assertNotNull(greeter);
assertEquals("Hello", greeter.greet());
}
}
| 1 | The @SpringBootTest annotation tells Spring Boot to look for a main configuration class (one with @SpringBootApplication, for instance) and use that to start a Spring application context. |
| 2 | Inject a bean of type Greeter by using @Autowired on the field definition. |
5. Micronaut @Singleton
In Micronaut framework, we can create an implementation and annotate it with @Singleton.
package example.micronaut;
import jakarta.inject.Singleton;
@Singleton (1)
public class HelloGreeter implements Greeter {
@Override
public String greet() {
return "Hello";
}
}
| 1 | Use jakarta.inject.Singleton to designate a class as a singleton. |
5.1. Micronaut Test
The following test verify it is possible to inject a bean of type Greeter in a Micronaut application.
package example.micronaut;
import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@MicronautTest (1)
class GreeterTest {
@Inject (2)
Greeter greeter;
@Test
void helloGreeterIsInjectedAsBeanOfTypeGreeter() {
assertNotNull(greeter);
assertEquals("Hello", greeter.greet());
}
}
| 1 | Annotate the class with @MicronautTest so the Micronaut framework will initialize the application context and the embedded server. More info. |
| 2 | Injection for Greeter. |
6. Conclusion
This guide illustrate that marking a class as a bean is similar in both frameworks. Micronaut Framework uses the standard jakarta.inject.Singleton and annotation while Spring uses custom annotations.
| Micronaut Framework generates the necessary information to fulfill the injection points at compilation time. |
Spring relies on classpath scanning to find classes annotated with @Component. In the Spring Boot application, HelloGreeter is detected because the application contains an Application with the @SpringBootApplication annotation. The @SpringBootApplication annotation applies the @ComponentScan annotation, which tells Spring to scan the package where the Application class is located and its sub-packages
|
7. Next Steps
Read more Spring Boot to Micronaut guides.
8. Help with the Micronaut Framework
The Micronaut Foundation sponsored the creation of this Guide. A variety of consulting and support services are available.
9. License
| All guides are released with an Apache license 2.0 license for the code and a Creative Commons Attribution 4.0 license for the writing and media (images…). |