Very simple service container (DI)
MyService.class
public class MyService {
public String bar() {
return "bar";
}
}
OtherService.class
public class OtherService {
private MyService myService;
public OtherService (MyService myService) {
this.myService = myService;
}
public String foo() {
return "foo";
}
}
MyServiceProvider.class
public class MyServiceProvider implements ServiceProvider<MyService> {
@Override
public Class<MyService> provides() {
return MyService.class;
}
@Override
public MyService provide(ServiceContainer container) {
return new MyService();
}
}
OtherServiceProvider.class
public class OtherServiceProvider implements ServiceProvider<OtherService> {
@Override
public Class<OtherService> provides() {
return OtherService.class;
}
@Override
public OtherService provide(ServiceContainer container) {
return new OtherService(container.get(MyService.class));
}
}
Main.class
public class Main {
public static void main(String[] args) {
ServiceContainer container = new ServiceContainer();
container.register(new MyServiceProvider());
container.register(new OtherServiceProvider());
String results = container.get(OtherService.class).foo();
System.out.println(results);
}
}