我有这段代码:
// Getting the jar URL which contains target class
URL[] classLoaderUrls = new URL[]{new URL("LINKTOJAR")};
// Create a new URLClassLoader
URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);
// Load the target class
Class<?> beanClass = urlClassLoader.loadClass("com.my.class");
// Create a new instance from the loaded class
Constructor<?> constructor = beanClass.getConstructor();
Object beanObj = constructor.newInstance();
// Getting a method from the loaded class and invoke it
Method method = beanClass.getMethod("sayHello");
method.invoke(beanObj);
它应该调用一个需要一个bean工作的sayHello方法。
该方法打印&#34; Hello%Name&#34;,其中名称是@AutoWired String。
对该方法的调用正在起作用,但问题在于它只是说&#34;你好&#34;因为字符串没有自动装配,而且它是&#34; null&#34;。
如果所有上下文都在我正在调用的jar中并且似乎没有加载,那么如何使这个Autowired成为可能?
感谢。
EDIT ::
想法是这样的:
ApplicationContext context = new ClassPathXmlApplicationContext(
"classpath*:**/applicationContext*.xml");
MyAdder myAdder = (MyAdder) context.getBean("myAdder");
为了加载上下文,但我不知道如何从外部jar加载此上下文。
答案 0 :(得分:0)
你期望它如何工作,因为Spring不知道你的外部类 - 它是在应用程序上下文之外。注入确实看起来像“魔术”,但它只是由Spring容器完成。
您必须使用自己的应用程序上下文,并获取bean“Spring方式”。
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html
一种方法是将所需的字符串注入当前上下文,并将其作为参数传递给方法。
另一个更“注入样式”的方法是使用反射自己设置字符串 - 这或多或少是由内部的Spring容器完成的。