Каким-то образом мне удалось загрузить классы @Component в контексте Spring во время выполнения. Может кто-нибудь, пожалуйста, дайте мне знать, есть ли другой более простой способ добиться того же:
@Component
public class CustomClassLoader {
@Autowired
ConfigurableApplicationContext applicationContext;
public void loadJar() throws ClassNotFoundException {
JarClassLoader jcl = new JarClassLoader();
jcl.add("D:\\new\\test"); //loaded all the jars from test folder
Map<String, byte[]> loadedResourceMap = jcl.getLoadedResources();
Set<String> loadedSet= loadedResourceMap.keySet().stream()
.filter(s -> s.startsWith("com/test/package/ext/")).collect(Collectors.toSet());
for (String localSet : loadedSet) {
String modifiedString = localSet.replace("/", ".").replace(".class", "");
logger.info("modified string " + modifiedString);
final Class<?> loadedClass = jcl.loadClass(modifiedString);
try {
Object loadedObject = applicationContext.getAutowireCapableBeanFactory()
.createBean(loadedClass); //autowiring the loaded classes
} catch (Exception e) {
logger.info("Exception occured while loading " + modifiedString
+ " exception is" + e.getStackTrace());
}
}
}
}