我正在使用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。
答案 0 :(得分:5)
您的BlablaLister
必须通过spring启动才能使自动装配工作
答案 1 :(得分:2)
为了使自动装配工作,Spring必须知道该对象 - 通过在配置文件中实例化它或者使用其中一个实例化bean的注释。为了使它工作,您可能只需要添加@Component注释以将其标识为弹簧管理的bean。
@Component
Class BlablaLister {
@Autowired BlablaService blablaService;
public List<Blabla> getList()
{
return blablaService.getAllBlablas;
}
}