为什么自动装配不起作用?

时间:2014-05-13 08:02:25

标签: java spring hibernate spring-mvc

我正在使用Hibernate和Spring Mvc在Spring Web App上工作,我想知道为什么Autowiring只能在控制器内部工作 这是一个简单的例子:

@Controller
@RequestMapping(value="SW/excel")
public class ExcelController
{
   @Autowired
   private BlablaService blablaService;
   @RequestMapping({""})
   public ModelAndView indexPage()
   {
     List<Blabla> blablas=BlablaService.getAllBlablas();
   }
}

这段代码对我来说很好,它返回我在我的数据库中的 Blablas 列表。 但是当我在控制器之外使用我的BlablaService时,它不起作用,这里就是例子

 @Controller
@RequestMapping(value="SW/excel")
public class ExcelController
{
   @RequestMapping({""})
   public ModelAndView indexPage()
   {
     BlablaLister lister= new ExcelExporter();
     List<Blabla> blablas=lister.getList();
   }

}

这是Excel Exporter:

Class BlablaLister {
@Autowired BlablaService blablaService;
public List<Blabla> getList()
   {
      return blablaService.getAllBlablas;
   }
}

但是我总是得到NullPointerException,只要在控制器的一个类中使用,getAllBlablas就会返回Null。

2 个答案:

答案 0 :(得分:5)

您的BlablaLister必须通过spring启动才能使自动装配工作

答案 1 :(得分:2)

为了使自动装配工作,Spring必须知道该对象 - 通过在配置文件中实例化它或者使用其中一个实例化bean的注释。为了使它工作,您可能只需要添加@Component注释以将其标识为弹簧管理的bean。

@Component
Class BlablaLister {
@Autowired BlablaService blablaService;
public List<Blabla> getList()
   {
      return blablaService.getAllBlablas;
   }
}