This feature is DEPRECATED in favor of Atlassian Spring Scanner.
A component plugin module defines a Java component which will be injected into the component system used by your plugin.
A component in a Plugins2 plugin will be installed into the Spring container for your plugin.
It will be "private" by default. This means classes in your plugin will be able to get that component dependency-injected, but other plugins will not.
However the component can be declared public, which allows other Plugins2 plugins to import a dependency on your component.
See the Plugins2 Component Plugin Module documentation for details.
A number of plugin developers in the past used Plugins1 Components to replace/override core JIRA components.
This is not guaranteed to work, and can cause subtle problems that would be very difficult to trace even if it "appears" to work.
Additionally, the behaviour can change wildly from version to version because of changes in the startup order of components and component inter-dependencies.