2013-10-15 8 views
2

Я работаю над SpringFrameWork и MySQL.SpringFrameWork Injected bean is null?

Я проверил и проверил связь между DB и каркасом. Проблема заключается в том, что я использую Injected bean в классе, который расширяет Thread, так или иначе bean становится null. Я не знаю почему.

Ниже приведена часть моего контроллера Spring, который создает объект с расширенными объектами (IISDaemon).

@RequestMapping("/list") 
public ModelAndView list(
     @RequestParam(value="page_no", defaultValue="1") Integer page_no) 
     throws Exception{ 
    log.info("Manager called Web page. page no : " + page_no); 
    ModelAndView mav = new ModelAndView(); 

    //test 
     log.info("svc bean : " + svc); 
     IISDaemon daemon = new IISDaemon(); 
     daemon.start(); 

    // 


    mav.setViewName("/iis/list"); 
    mav.addObject("list", svc.list(page_no)); 
    return mav; 
} 

И ниже класс IISDaemon.

public class IISDaemon extends Thread { 
    private Logger log = Logger.getLogger(getClass()); 

    @Inject 
    IISSVCImpl svc; 

    @Override 
    public void run() { 
     log.info("Daemon starts."); 
     ArrayList<IISVO> list = new ArrayList<IISVO>(); 
     try{ 
      log.info("svc bean : " + svc); 
      list = (ArrayList<IISVO>)svc.jobList(1); 
      for(IISVO vo : list){ 
       this.sleep(5000); 
       log.info(vo); 
      } 
     }catch(Exception e){e.printStackTrace();} 
    } 
}; 

Как вы можете видеть, я печатаю 2 журнала в каждом классе. Верхний -

"INFO : org.owls.iis.IISMgrController - svc bean : [email protected]2".

И Lower один

"INFO : org.owls.iis.daemon.IISDaemon - svc bean : null"

Спасибо за ваши советы заранее: D

ответ

0

Это не впрыскивается, потому что IISDaemon не Spring класс управляемых. Вы создаете экземпляр в своем классе контроллера с помощью оператора new.

Возможно, вы предпочли бы ввести IISDaemon в свой класс контроллера, а затем предоставить введенное значение вашему ISSDaemon через его конструктор.

+0

Благодарим за консультацию. Но форма, которую я хочу в финальной версии, немного отличается. «IISDaemon» должен начинаться немедленно по мере запуска WAS. И ему нужно получить доступ к базе данных (именно поэтому я внедряю класс обслуживания в демон.). –

+0

Итак, я добавил IISDaemon в качестве компонента в корневом контексте (например, ваше первое предложение.) И из-за цели (как я добавил комментарий) я поместил init-method = "start". Поэтому мое решение выглядит как . И это все еще не работает. Спасибо, но можете ли вы предложить другие идеи? : D Еще раз спасибо –

+0

Oh. сообщение об ошибке по-прежнему показывает, что bean-файл IISSvcImpl имеет значение «null». –

0

Я перестроил программу. И теперь он отлично работает. Я не помню, в какой ситуации я был, но, вероятно, ответ Николаса прав. Может быть, я могу пропустить резиста bean для root-context.xml или @Component. Спасибо, что прочитали этот вопрос.

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