如何在使用类加载,java反射和应用程序上下文时在运行时创建bean

时间:2017-07-15 06:09:08

标签: java spring spring-mvc spring-boot

我有两个不同的项目。第一个项目,包括一个加载插件的类和一个启动我们项目的主类。在第二个项目中,我有一个由第一个项目加载的插件。所以,这是我的类加载类:

@Autowired
ApplicationContext context;

ClassLoader loader = null;

try {
loader = URLClassLoader.newInstance(new URL[]{new   

File(plugins + "/" + pluginName + "/" + pluginName +   

".jar").toURI().toURL()}, getClass().getClassLoader());

} catch (MalformedURLException e) {
e.printStackTrace();
}

Class<?> clazz = null;

try {

clazz = Class.forName("com.sample.Specific", true, loader);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

Method method = null;
try {
method = clazz.getMethod("run",new Class[]{});
} catch (NoSuchMethodException e) {
e.printStackTrace();
}

try {
method.invoke(context.getBean(clazz),new Object[]{});
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}

现在我在第二个项目中有一个插件,我正在执行一些工作,如下所示:

package com.sample
@Service
public class Specific {

@Autowired
private FD fd;


public void run(){

    fd.init();

}

}

现在我得到的是当我在主项目中添加Specific class的依赖项时,它开始正常工作,因为它获取了类Specific的bean。什么时候,我删除依赖它说

Consider defining a bean of type 'com.sample.Specific' in your configuration.

我不想添加依赖项,因为我必须在运行时加载类并在不创建新实例的情况下启动它。请允许任何人在这种情况下帮助我。

0 个答案:

没有答案