从外部罐子加载一个包含所有组件的类

时间:2016-11-10 10:23:54

标签: java spring javabeans

我有这段代码:

    // 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加载此上下文。

1 个答案:

答案 0 :(得分:0)

你期望它如何工作,因为Spring不知道你的外部类 - 它是在应用程序上下文之外。注入确实看起来像“魔术”,但它只是由Spring容器完成。

您必须使用自己的应用程序上下文,并获取bean“Spring方式”。

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html

一种方法是将所需的字符串注入当前上下文,并将其作为参数传递给方法。

另一个更“注入样式”的方法是使用反射自己设置字符串 - 这或多或少是由内部的Spring容器完成的。