Prev Next

Java / Micronaut Interview questions

Explain the internal working of Micronaut's compile-time dependency injection?

Micronaut's DI pipeline runs almost entirely during the Java, Kotlin, or Groovy compilation step, using the standard annotation processing API.

graph TD A[Source classes with singleton, inject, factory annotations] --> B[Micronaut annotation processor] B --> C[In-memory bean model: constructors, fields, qualifiers, scopes] C --> D[Generated Definition and Introspection classes] D --> E[Compiled into the application JAR] E --> F[ApplicationContext.run loads definitions via generated index] F --> G[Bean graph constructed by executing generated code]

Concretely: the processor visits every class carrying a DI annotation and builds an internal model describing its constructor parameters, injected fields or methods, applicable qualifiers like @Named, and declared scope. From that model it emits a companion class, typically suffixed $Definition, containing the literal Java code needed to instantiate the bean and satisfy its dependencies, effectively what a human would write by hand if wiring the object graph manually.

It also emits a small service-loader-style index file so the runtime doesn't need to scan the JAR for these generated classes; it just reads the index. At startup, ApplicationContext.run() loads this index, resolves scope and ordering while respecting @Requires conditions and bean replacement, and calls into the generated definition classes to construct singletons or register factories for other scopes.

Because the "reflection-like" logic is really just generated bytecode, tools like GraalVM's static analyzer see normal method calls end to end, which is exactly why this design underpins Micronaut's native image compatibility as well as its startup speed.

Micronaut's DI model is built during:
How does the runtime find generated bean definition classes without scanning the JAR?

More Related questions...

What is Micronaut? What are the key features of Micronaut? What is dependency injection in Micronaut? What are Micronaut beans? What is the purpose of the @Singleton annotation in Micronaut? What are the types of bean scopes in Micronaut? How do you create a Micronaut application? What is Micronaut Launch? What is ahead-of-time (AOT) compilation in Micronaut? What are Micronaut controllers? How do you define a REST endpoint in Micronaut? What is the purpose of the @Inject annotation in Micronaut? What are Micronaut configuration properties? Describe how application.yml is used in Micronaut? What is the Micronaut HTTP Client? Why is Micronaut faster at startup than traditional Spring Boot applications? Why does Micronaut avoid using reflection? How does Micronaut achieve compile-time dependency injection? What is the difference between Micronaut and Spring Boot? What is the difference between @Singleton and @Prototype scope in Micronaut? When should you use @Factory in Micronaut? How does Micronaut Data work? What is the difference between Micronaut Data JDBC and Micronaut Data JPA? How do you implement bean validation in Micronaut? How does Micronaut implement AOP (aspect-oriented programming)? How does Micronaut support reactive programming? What is the difference between a Micronaut declarative HTTP client and the low-level HttpClient? How do you implement client-side load balancing in Micronaut? What is Micronaut's service discovery mechanism? How do you implement retries and circuit breakers in Micronaut? What is the difference between @Client and @Controller in Micronaut? How do you handle exceptions globally in a Micronaut application? What is the purpose of Micronaut's BeanContext and ApplicationContext? How does Micronaut support GraalVM native image compilation? When would you choose Micronaut over Spring Boot for a new project? Explain the internal working of Micronaut's compile-time dependency injection? Explain the lifecycle of a Micronaut bean? Explain the execution flow of an HTTP request in Micronaut? How can you optimize Micronaut application startup time further? How do you troubleshoot slow or failing GraalVM native image builds in Micronaut? What is the difference between Micronaut's bean introspection and Java reflection? Explain the internal working of Micronaut's AOP proxy generation? Explain the internal working of Micronaut Data repository method generation? How do you implement distributed tracing across Micronaut microservices? How do you secure a Micronaut application with JWT authentication? How does Micronaut resolve configuration properties across multiple environments? Explain the internal working of Micronaut's event publishing system? How do you troubleshoot excessive memory usage in a Micronaut native image at runtime? How do you troubleshoot a Micronaut bean that fails to inject due to ambiguous qualifiers? Explain how Micronaut's compile-time architecture influences microservice design decisions in real projects?
Show more question and Answers...


Comments & Discussions