@Retention(value=CLASS)
@Target(value=METHOD)
public @interface Composition
Init, Start, Stop,
Destroy annotations. In such cases you can tell the dependency manager which instances to
consider, by annotating a method in your Component, returning a list of objects which are part
of the implementation.
This annotation may be applied on a method which is part of class annotated with either a Component,
AspectService, or AdapterService.
Here, the "MyComponent" component is composed of the Helper class, which is also injected with service dependencies. The lifecycle callbacks are also invoked in the Helper (if the Helper defines them):
class Helper {
volatile LogService logService; // Injected
void start() {} // lifecycle callback
void bind(OtherService otherService) {} // injected
}
@Component
class MyComponent {
// Helper which will also be injected with our service dependencies
private Helper helper = new Helper();
@Composition
Object[] getComposition() {
return new Object[] { this, helper };
}
@ServiceDependency
private LogService logService; // Helper.logService will be also be injected, if defined.
@Start
void start() {} // the Helper.start() method will also be called, if defined
@ServiceDependency
void bind(OtherService otherService) {} // the Helper.bind() method will also be called, if defined
}