Add runtime capabilities in Java carefully so extension objects stay explicit and do not turn into hidden service locator behavior.
Extension Object is attractive because it allows capabilities to appear at runtime. That flexibility is useful, but it can also hide too much.
Dynamic extension is strongest when capability discovery is explicit and failure to find an extension is treated as a first-class outcome.