๐ QUARKUS WAY
@ApplicationScoped
public class LoggerService {
@Inject
@ConfigProperty(name = "logging.verbose", defaultValue = "false")
boolean verbose;
public void log(String message) {
if (verbose) System.out.println("[VERBOSE] " + message);
}
}
๐ฑ SPRING WAY
@Service
public class LoggerService {
@Value("${logging.verbose:false}")
private boolean verbose;
public void log(String message) {
if (verbose) System.out.println("[VERBOSE] " + message);
}
}
๐ KEY DIFFERENCES
๐ธ Bean discovery
- Quarkus: CDI annotations (@ApplicationScoped, @Inject).
- Spring: Stereotypes (@Service, @Component) + @Autowired (constructor injection recommended).
๐ธ Scope
- Quarkus: @ApplicationScoped = app-wide singleton.
- Spring: default scope is singleton via @Service.
๐ธ Config
- Quarkus: MicroProfile Config (@ConfigProperty).
- Spring: @Value or @ConfigurationProperties.
๐ธ Startup & footprint
- Quarkus favors fast startup & low RSS (great for containers/GraalVM).
- Spring offers rich ecosystem & autoconfiguration.
๐ธ Testing & mocks
- Quarkus: @QuarkusTest, @InjectMock.
- Spring: @SpringBootTest, @MockBean.
๐ MIGRATION TIPS (SPRING โ QUARKUS)
- Replace @Service/@Component โ @ApplicationScoped (or appropriate CDI scope).
- Swap @Autowired/@Value โ @Inject and @ConfigProperty.
- Move Boot starters โ Quarkus extensions (quarkus-smallrye-config, quarkus-rest, etc.).
- Replace Spring annotations/APIs with CDI/JAX-RS counterparts (e.g., @RestController โ @Path + @GET).
- Tests: @SpringBootTest โ @QuarkusTest, @MockBean โ @InjectMock.
- Use the Quarkus Dev Mode (mvn quarkus:dev) to iterate quickly and catch config/DI issues early.
โ TAKEAWAYS
- Same concept, different idioms: CDI (Quarkus) vs Spring stereotypes.
- Config is first-class in both; choose MicroProfile Config or Spring Config accordingly.
- Quarkus shines for container/GraalVM use cases; Spring shines with its ecosystem & autoconfig.
- Migration is mostly annotation & API mappingโstart with DI, config, and web layers.
#๏ธโฃ #Java #Quarkus #Spring #SpringBoot #CDI #JakartaEE #MicroProfile #Microservices #CleanCode #DevTips #CloudNative #GraalVM