簡體   English   中英

Spring Controller init方法

[英]Spring Controller init method

據我所知,彈簧控制器是無國籍的嗎? 如果我將字段設置為值,則下次調用將撤消該字段。

是否有可能添加init方法或其他東西? 當我的控制器被觸發時,被調用一次的方法? 我正在使用spring 3.0和一個注釋配置atm。

默認情況下,Spring控制器應該處理無狀態,這是正確的。 然而,這並不意味着您的價值將在下次通話時被撤銷。 從程序員的角度來看,如果您最終使用相同的控制器實例或不同的實例,則無法判定。 更進一步的是,沒有其他人使用控制器(因此在此期間改變了其狀態)。 這就是為什么不建議在控制器的字段中保存任何狀態。 也許您應該重新考慮控制器中對字段的需求。

實際上,spring bean有一個init方法。 您可以使用@PostConstruct在控制器上簡單地注釋public void方法。 在注入依賴項之后執行此方法。 因此,在創建控制器實例之后,將調用此方法。

據我了解你的問題,你找一些在每次調用控制器方法之前執行的方法 在這種情況下,您可以在每個控制器方法的開頭簡單地調用“init”方法 如果您不想在代碼中明確地執行此操作,AOP會為您提供替代方案。

據我所知,彈簧控制器是無狀態的嗎? 如果我將字段設置為值,則下次調用將撤消該字段。

我認為這是不正確的:Spring控制器可以是有狀態的 您應該非常小心,因為Controller應該是可重入且線程安全的,並支持多個線程同時執行多個請求。

可以肯定地說,將控制器設計為有效無狀態是最佳實踐 ; 即控制器“活動”時沒有狀態發生變化。

是否有可能添加init方法或其他東西?

你的意思並不完全清楚。 然而:

  • 調用控制器的handleRequest來啟動請求。
  • 如果將任何bean(例如控制器bean)聲明為ApplicationContextAware ,它將被回調以通知它ApplicationContext。
  • 如果您將任何bean聲明為ServletContextAware ,它將被回調以通知它ServletContext。
  • 如果將任何bean聲明為InitializingBean ,則在設置所有屬性時將回調它。

毫無疑問,您可以使用其他回調和掛鈎來觸發一些延遲初始化/上下文設置。

(我不確定這些回調/鈎子如何映射到注釋......但我確信它們會這樣做。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM