Does Spring implements its own way to scan the class in packages or does it use a external library like 'reflection':
A bit of both. They use ASM for reading the class files, but use their own MetadataReader
so they can offer a more flexible inheritance model for annotations than Java offers out of the box (in plain Java, annotations are only inherited from a super class. In Spring, they are also inherited from super interfaces and meta annotations).