2013-04-04 2 views
1

У меня есть простой класс и вы хотите использовать @Autowired для запуска метода из объекта numberHandler. Однако объект имеет значение null. Есть идеи?Как @autowire реализация класса из файла jar?

@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"/> 

и класс реализации:

package com.my.lookup; 

@Component 
public class MyHandler implements Runnable { 

private static Logger LOGGER = LoggerFactory.getLogger(MyHandler.class); 

@Override 
public void run() { 

    // do something 
} 

ли я четко определить applicationContext.xml в главном классе с ClassPathXmlApplicationContext() или есть способ для Spring автоматически распознать его в моем классепате час?

ответ

1

Проблема заключается в том, что вы создаете класс Startup, который не управляется весной. Вам нужно получить экземпляр Startup, управляемый Spring от вашего ApplicationContext. Изменение вашего основного метода следующим образом должно работать ...

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

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

Это сработало. Благодаря! Что касается второго вопроса: Должен ли я явно указать applicationContext.xml в основном классе с классом ClassPathXmlApplicationContext() или есть ли способ Spring автоматически распознать его в моем пути к классам? – luksmir

+0

Вам нужно инициализировать контекст приложения, как и вы, нет автоматического способа в простом Java-приложении. Пожалуйста, отметьте ответ как принятый, так как он решил вашу проблему. – hyness

+0

Спасибо за ответ. – luksmir

Смежные вопросы