The {{\[classscan\]}} component aims to provide a general-purpose library that can be used or extended to satisfy any potential usage pattern requiring information about the identity and structure of various classes provided by a given {{ClassLoader}}.

Goals

Desired Capabilities

Filtering

Marker File

Multiple frameworks have a "marker" file that indicates a jar is eligible for processing. A ClassScan consumer will want to be able to filter a jar based on the maker file criteria:

Content

Consumers will require different levels of granularity:

Cache

Development Ideas

These are ideas and might not all be adopted; that's what the consenus-building process is for!

High-Level Modules

api

BCEL

xbean

xbean-finder skips certain aspects of scanning (e.g. find all implementations of interface Foo) unless configured otherwise. This is an interesting concept that might be extended profitably to an "iterative scan approach," allowing explicit requests for certain types of information to trigger a "deeper" scan than that for which a given scanner impl is configured to do by default.

Reactor

This is perhaps the right level at which to provide higher-level mechanisms for working with the info in a {{MetaClassLoader}}. Based on the ideas of Mark Struberg and concepts in the {{\[meiyo\]}} sandbox component (expected to be more or less subsumed by {{\[classscan\]}})

Cache

With this approach, MetaRegistry would have a default implementation that simply deferred to the available scanner. The default implementation could then be wrapped by a MetaRegistry implementation that would provide a general-purpose cache for the class metadata (see "wrapper structure" idea under "development ideas"). This way caching could be implemented independently, and reusably, from scanning. This might or might not be compatible with the "iterative scan approach" ideated in the Scanners section.

Testing the Implementation

Replace the xbean-finder clones in branches of the following