我想知道是否需要锁定在应用程序范围内创建的一些代码。如果我在应用程序范围内创建一个对象说 userDAO.cfc,那么它可用于所有页面。然后,如果我在该对象中有一个方法说 getUserInfo(userID) 将在应用程序的不同部分调用,我是否需要锁定此方法?
AMS949
问问题
393 次
1 回答
4
简短的回答:可能不是。
如果该对象是在 Application.cfc 的 OnApplicationStart() 方法中在应用程序范围内创建的,并且它永远不会更改,并且您确保为所有函数更改所有变量,那么您不需要锁定访问给它。
在这种情况下, OnApplicationStart() 会为您进行锁定,并且在创建该方法之前不会让任何人继续进行。这很好,因为它只允许创建一次项目,并确保它在其他人使用它之前就存在。
如果您从其他任何地方实例化对象,例如某个随机页面的顶部,那么是的,您需要将它锁定在这里,以及引用它的任何地方。
如果该对象将更改为另一个对象,或者如果它保持任何状态,例如私有或公共变量(变量。* 或 this.*)会更改为其他对象,您可能希望在外部锁定它,或者您可以尝试锁定它基于每个变量在 cfc 中。
最后,如果您不改变所有变量(使用 Mike Schierberl 的 varScoper!),那么您将更改对象的状态。您永远不应该真正达到这一点,但这是锁定的情况。
整个事情的大例外是如果您使用的是 CF 5 或更低版本,在这种情况下必须锁定任何共享范围访问,如果您使用的是 CF 6 或 6.1,在这种情况下没有 Application.cfc。
于 2008-11-19T15:10:30.700 回答