[英]Spring Controller init method
據我所知,彈簧控制器是無國籍的嗎? 如果我將字段設置為值,則下次調用將撤消該字段。
是否有可能添加init方法或其他東西? 當我的控制器被觸發時,被調用一次的方法? 我正在使用spring 3.0和一個注釋配置atm。
默認情況下,Spring控制器應該處理無狀態,這是正確的。 然而,這並不意味着您的價值將在下次通話時被撤銷。 從程序員的角度來看,如果您最終使用相同的控制器實例或不同的實例,則無法判定。 更進一步的是,沒有其他人使用控制器(因此在此期間改變了其狀態)。 這就是為什么不建議在控制器的字段中保存任何狀態。 也許您應該重新考慮控制器中對字段的需求。
實際上,spring bean有一個init方法。 您可以使用@PostConstruct在控制器上簡單地注釋public void方法。 在注入依賴項之后執行此方法。 因此,在創建控制器實例之后,將調用此方法。
據我了解你的問題,你找一些在每次調用控制器方法之前執行的方法 。 在這種情況下,您可以在每個控制器方法的開頭簡單地調用“init”方法 。 如果您不想在代碼中明確地執行此操作,AOP會為您提供替代方案。
據我所知,彈簧控制器是無狀態的嗎? 如果我將字段設置為值,則下次調用將撤消該字段。
我認為這是不正確的:Spring控制器可以是有狀態的 。 您應該非常小心,因為Controller應該是可重入且線程安全的,並支持多個線程同時執行多個請求。
可以肯定地說,將控制器設計為有效無狀態是最佳實踐 ; 即控制器“活動”時沒有狀態發生變化。
是否有可能添加init方法或其他東西?
你的意思並不完全清楚。 然而:
handleRequest
來啟動請求。 ApplicationContextAware
,它將被回調以通知它ApplicationContext。 ServletContextAware
,它將被回調以通知它ServletContext。 InitializingBean
,則在設置所有屬性時將回調它。 毫無疑問,您可以使用其他回調和掛鈎來觸發一些延遲初始化/上下文設置。
(我不確定這些回調/鈎子如何映射到注釋......但我確信它們會這樣做。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.