2013-08-07 59 views
0

美好的一天人們。現在在我的web應用程序中,我使用了大量的列表,這些列表必須是我的應用程序的sessionAttributes。所有這些都存儲在一個控制器:Spring MVC初始化所有控制器啓動嗎?

@Controller 
@SessionAttributes({"institutionAttributes", "institutionTypeAttributes", "formDateAttributes", 
         "formDescriptionAttributes", "deleteAttributesDescription", "deleteAttributesInstitution", "deleteAttributesDate"}) 
public class MainController { 


    List<InstitutionInForm> listOfInstitutionsAttributes = new ArrayList<InstitutionInForm>(); 
    List<InstitutionTypeInForm> listOfInstitutionTypesAttributes = new ArrayList<InstitutionTypeInForm>(); 
    List<FormDate> listOfFormDateAttributes = new ArrayList<FormDate>(); 
    List<FormDescription> listOfFormDescriptionsAttributes = new ArrayList<FormDescription>(); 


    List<FormDescription> listOfFormDescriptionsDeleteAttributes = new ArrayList<FormDescription>(); 
    List<InstitutionInForm> listOfInstitutionDeleteAttributes = new ArrayList<InstitutionInForm>(); 
    List<FormDate> listOfDatesDeleteAttributes = new ArrayList<FormDate>(); 

//other methods omitted 

每個此解釋將與初始值10初始化和它需要一些存儲器還。 我決定通過分離控制器來分離它們。

因此,我問它如何在啓動我的應用程序時初始化控制器,或者當DispatcherServlet將從用戶處獲得請求時,在用所有列表初始化它們之後,找到合適的控制器。

如何防止當前不需要初始化控制器和列表等?

謝謝開發人員。良好的生產力編碼日。

+0

你不應該擔心7個空的Arraylists。只要不添加對象,內存消耗就非常低(與完整的Spring應用程序相反)。 *注意:數組(列表)只包含對包含對象的引用,而不包含對象本身*。如果你真的關心10個引用,那麼你可以使用較低的初始大寫初始化數組(但是這有一個缺點,即在添加新對象時,列表需要更頻繁地複製內部數組。) – Ralph

+0

謝謝先生。我有問題。如果List只包含引用,那麼所有對象都存儲在哪裏? –

+0

在堆中的某個地方。 - 但它們只在創建後才存儲在堆中。 (在你的代碼中,你只是創建列表而不是「對象」) – Ralph

回答

3

您可以使用@Lazy來防止您的控制器bean的急切加載/初始化
這會在第一次請求到來時實例化。

@Lazy 
@Controller 
public class MainController { ...} 
+0

因此,這也將初始化控制器內的所有數據列表?它會保持活着後,將使用睡眠清醒模式> ??任何ides如何使它? –

+0

是的初始化它會初始化你的所有列表,但它會在那之後保持活着....你的需求聽起來像你需要使用[WeakHashMap](http://java.sun.com/javase/6/docs/api /java/util/WeakHashMap.html)來訪問你的列表數據 – harrybvp

+0

謝謝harrybvp的解釋 –