Skip to content

Centralize Reflections Scanning#54

Merged
kainovaii merged 1 commit intomainfrom
dev
Mar 19, 2026
Merged

Centralize Reflections Scanning#54
kainovaii merged 1 commit intomainfrom
dev

Conversation

@kainovaii
Copy link
Member

Pull Request: Centralize Reflections Scanning

Summary

Replaces 10 scattered new Reflections() calls with a single cached instance via ReflectionsProvider. One classpath scan at boot instead of 10.


Changes

1. ReflectionsProvider — cached singleton

Added: di/ReflectionsProvider.java

  • Lazy-initialized with double-checked locking (volatile + synchronized)
  • Configured with Scanners.TypesAnnotated and Scanners.SubTypes to cover all existing query types
  • Exposes getTypesAnnotatedWith(annotation) and getSubTypesOf(type) as static helpers
  • clear() method for test teardown

2. Migrated files (10 usages → 0 direct Reflections)

Modified: config/ConfigLoader.java

  • new Reflections(Obsidian.getBasePackage())ReflectionsProvider.getTypesAnnotatedWith(Config.class)

Modified: database/seeder/SeederLoader.java

  • new Reflections(Obsidian.getBasePackage())ReflectionsProvider.getTypesAnnotatedWith(Seeder.class)

Modified: database/MigrationManager.java

  • new Reflections(basePackage, Scanners.SubTypes)ReflectionsProvider.getSubTypesOf(Migration.class)

Modified: realtime/websocket/WebSocketLoader.java

  • new Reflections(Obsidian.getBasePackage())ReflectionsProvider.getTypesAnnotatedWith(WebSocket.class)

Modified: http/controller/ControllerLoader.java

  • Two new Reflections() calls replaced (controllers + global advices)

Modified: livecomponents/scanner/LiveComponentScanner.java

  • new Reflections(ConfigurationBuilder...)ReflectionsProvider.getTypesAnnotatedWith(LiveComponentImpl.class)

Modified: di/ComponentScanner.java

  • new Reflections(Obsidian.getBasePackage(), Scanners.TypesAnnotated)ReflectionsProvider.getTypesAnnotatedWith()
  • scanAndRegister no longer takes a Reflections parameter

Modified: security/auth/Auth.java

  • new org.reflections.Reflections(Obsidian.getBasePackage())ReflectionsProvider.getTypesAnnotatedWith(UserDetailsServiceImpl.class)

Modified: security/auth/TokenAuth.java

  • new org.reflections.Reflections(Obsidian.getBasePackage())ReflectionsProvider.getTypesAnnotatedWith(TokenResolverImpl.class)

Breaking Changes

None. Internal refactor only — no public API changes.

@kainovaii kainovaii merged commit 7b77adc into main Mar 19, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant