extensions/arc/deployment/src/main/resources/META-INF/quarkus-skill.md
@ApplicationScoped — one instance per application (most common for services).@RequestScoped — one instance per HTTP request.@Singleton — like @ApplicationScoped but NOT proxied. Use only when proxy overhead matters.@Dependent — new instance per injection point. Avoid unless specifically needed.@Inject on fields (package-private preferred) or constructor parameters.@Inject is not required when there is exactly one constructor (Simplified Constructor Injection).@Inject is also not required when a qualifier annotation is used (e.g., @Channel("my-channel") Emitter<String> emitter).@Produces methods to create beans that need custom initialization.Event<T> injection and event.fire(payload).void onEvent(@Observes MyEvent event).@ObservesAsync for async event handling.@Startup on a bean class forces eager initialization at startup.@PostConstruct and @PreDestroy for lifecycle hooks.@InterceptorBinding.@Interceptor and @AroundInvoke.@PostConstruct, @PreDestroy, and @AroundConstruct.@Priority(value).@Scheduled, @WebSocket).Instance<T> lookup is detected automatically. Use @Unremovable if a bean is only accessed via CDI.current() or ArC-specific APIs like Arc.container().@InjectMock to replace beans in @QuarkusTest.@Singleton beans, use Mockito's @InjectSpy or configure the mock manually, since @InjectMock requires a client proxy (normal-scoped beans only).@QuarkusComponentTest for lightweight CDI-only tests (no full app startup).new MyService() — always let CDI inject beans.@Singleton beans are NOT proxied — there is no client proxy indirection, which gives slightly better performance.@Inject is not required when there is exactly one constructor.