2014-05-13 38 views
-2

我正在一個Spring Web應用程序與Hibernate和Spring MVC的,我想知道爲什麼自動裝配只能內部控制器 這是一個簡單的例子:爲什麼自動裝配不起作用?

@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的出口商:

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

但我總是得到,NullPointerException異常,每當在控制器中使用某個類時,getAllBlablas都會返回Null。

+3

它不應該是@Controller還是有法國的Spring版本@Controlleur? ;) – Stefan

+0

鍵入錯誤... – TheByeByeMan

回答

5

BlablaLister已經通過彈簧按順序啓動了自動裝配工作

+0

爲什麼自動裝配服務在控制器中工作,假設我沒有任何配置通過彈簧啓動控制器? – TheByeByeMan

+0

實際上,通過將其標記爲@Controller並在Spring配置中使用組件掃描,Spring會根據Spring文檔自動將其選中 – maczikasz

+0

,如果將@Component添加到我的類中,它將自動選爲Aidan建議的形式,但是我會有同樣的問題... – TheByeByeMan

2

爲了使自動裝配工作的彈簧必須瞭解目標 - 要麼有它在配置文件中實例化或通過使用一個實例化bean的註釋。爲了使它工作,您可能只需要添加@Component註釋來將其標識爲spring管理的bean。

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

仍然返回null ... – TheByeByeMan

+0

你如何實例化你的BlablaLister?你是從春天的上下文請求它,還是隻是創建一個實例?你需要從spring上下文中請求實例。 – Aidan

+0

謝謝@艾丹:)我明白了 – TheByeByeMan