据我了解弹簧控制器是无状态的吗?如果我将某个字段设置为某个值,则在下一次调用时会撤消该字段。弹簧控制器init方法
是否有可能添加一个init方法或其他东西?当我的控制器被触发时调用一次的方法?我使用spring 3.0和一个注释配置atm。
据我了解弹簧控制器是无状态的吗?如果我将某个字段设置为某个值,则在下一次调用时会撤消该字段。弹簧控制器init方法
是否有可能添加一个init方法或其他东西?当我的控制器被触发时调用一次的方法?我使用spring 3.0和一个注释配置atm。
Spring控制器默认情况下应该处于无状态,这是正确的。不过,这并不意味着您的价值将在下一次通话中被撤销。从程序员的角度来看,如果最终得到的是同一个控制器实例或不同实例,那么这是不可判定的。更不确定的是没有其他人使用控制器(因此在此期间改变了它的状态)。这就是为什么不建议在控制器的域中保存任何状态。也许你应该重新考虑在你的控制器中需要一个字段。
实际上有一个spring bean的init方法。您可以简单地在您的控制器上注释一个公共无效方法@PostConstruct。此方法是依赖关系已被注入后执行。因此,该方法在创建控制器实例后被调用。
据我了解您的问题,您寻找一种方法,即在每次调用控制器的方法之前执行。在这种情况下,您可以简单地在调用您的“init” - 在每个控制器方法开头的方法。如果你不想在你的代码中明确地做到这一点,AOP为你提供了另一种选择。
据我所知,弹簧控制器是无状态的吗?如果我将某个字段设置为某个值,则在下一次调用时会撤消该字段。
我认为是不正确的:弹簧控制器可以是有状态。您应该非常小心,因为控制器应该是可重入且线程安全的,并且支持多个线程同时执行多个请求。
它可能是安全的说它最佳实践控制器被设计为有效无状态;即在控制器“有效”时没有改变的状态。
是否有添加init方法或其他的可能性?
这并不完全清楚你的意思。但是:
handleRequest
被调用来启动请求。ApplicationContextAware
,它将被回调以通知其ApplicationContext。ServletContextAware
它将被回调通知它的ServletContext。InitializingBean
,则将在设置所有属性时调用它。无疑还有其他回调和挂钩可用于触发某些延迟的初始化/上下文设置。
(我不知道如何将这些回调/钩子映射到注释...但我敢肯定,他们这样做。)
你在不能注入控制器需要什么样的数据或存储在会话中? – Jeff 2010-07-13 12:21:18