Я встретил сценарий использования, следующий:
В частности: у меня есть 2 проекта, p1 и p2.
p1: у этого проекта есть класс A, который использовал аннотацию @Resource для автоматической передачи bean-компонента B в Spring IOC, а класс A имеет метод f (), который использует bean-компонент atuowired B.
public class A{
@Resource
B b;
public void action() {
System.out.println(b == null);
b.dosth();
}
}
p2: этот проект вызывает метод действия A путем отражения.
URL url1 = new URL(jarPath); // "file:D:/jarload/test.jar"
URLClassLoader myClassLoader1 = new URLClassLoader(new URL[] { url1 },
Thread.currentThread().getContextClassLoader());
Class<?> myClass1 = myClassLoader1.loadClass(classFullName);
Object obj = myClass1.newInstance();
// this.context.getAutowireCapableBeanFactory().autowireBean(obj); //without this,the b will be null.
Method method = myClass1.getDeclaredMethod("action");
method.invoke(obj);
- Экспорт p1 в файл jar по Eclipse.
- В p2 запустите банку.
Надеюсь, это поможет вам!