Inversion of Control is not only possible at the class level, but at the module level. OSGi has been doing it for a long time. However, there are IoC approaches directly available in Java, as well as in Spring. Out-of-the-box, the Java API offers a specific form of Inversion of Control. It's implemented by the Service Loader class.