Java 如何从jar文件中@autowire类的实现?

Java 如何从jar文件中@autowire类的实现?,java,spring,autowired,Java,Spring,Autowired,我有一个简单的类,希望使用@Autowired从numberHandler对象触发该方法。但是,该对象为空。有什么想法吗 @Component public class Startup implements UncaughtExceptionHandler { @Autowired private MyHandler myHandler; public static void main(String[] args) { startup = new Startup(); st

我有一个简单的类,希望使用@Autowired从numberHandler对象触发该方法。但是,该对象为空。有什么想法吗

@Component
public class Startup implements UncaughtExceptionHandler {

@Autowired
private MyHandler myHandler;

public static void main(String[] args) {

    startup = new Startup();
    startup(args);

}

public static void startup(String[] args) {

    startup = new Startup();

}
private void start() {
     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
     myHandler.run(); //NULL
 }
applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
   xmlns:util="http://www.springframework.org/schema/util"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd">

<context:annotation-config />
<context:component-scan base-package="com.my.lookup"/>  

我是否必须使用ClassPathXmlApplicationContext()在主类中显式定义applicationContext.xml,或者Spring是否有办法在我的类路径中自动识别它?

问题是您正在实例化不是Spring管理的
启动
类。您需要从
ApplicationContext
获取Spring管理的
Startup
实例。改变你的主要方法如下应该工作

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    startup = context.getBean(Startup.class);
    startup.start();
}

private void start() {
    myHandler.run();
}

问题是您正在实例化不是由Spring管理的
启动
类。您需要从
ApplicationContext
获取Spring管理的
Startup
实例。改变你的主要方法如下应该工作

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    startup = context.getBean(Startup.class);
    startup.start();
}

private void start() {
    myHandler.run();
}

成功了。谢谢关于第二个问题:我是否必须使用ClassPathXmlApplicationContext()在主类中显式定义applicationContext.xml,或者Spring是否有办法在我的类路径中自动识别它?您需要像初始化应用程序上下文一样,在普通java应用程序中没有自动方式。请将答案标记为已接受,因为它解决了您的问题。它有效。谢谢关于第二个问题:我是否必须使用ClassPathXmlApplicationContext()在主类中显式定义applicationContext.xml,或者Spring是否有办法在我的类路径中自动识别它?您需要像初始化应用程序上下文一样,在普通java应用程序中没有自动方式。请将答案标记为已接受,因为它解决了您的问题。