您没有说该代码在哪里或如何/何时执行,因此不可能自信地回答您的问题。
如果它在 Application.cfc 的 onApplicationStart() 中,那么 - 是的 - 它只会在应用程序启动时执行。
但是,如果它只是在某个文件中,则每次调用该文件时都会重新执行它,除非您采取措施确保它不被调用。EG:在它周围加上一个条件:
<cfif not (structKeyExists(application, "components") and structKeyExists(application.components, "blog"))>
<cfset application.components.blog = createObject('component','sharedcomponents.cfc.blog').init()>
</cfif>
您似乎想知道其中是否发生了一些魔术,因为您的变量分配在应用程序范围内设置了一些东西,如果重新执行其所在的文件,CF 将自动知道不会重新运行它。不,CF 只是按照它的指示去做:如果你告诉它运行该代码,它就会运行。无论变量被分配在哪个范围内。
您继续询问是否检测文件是否已更新并相应地重新启动整个应用程序。这些文件是如何更新的?我认为它是主动部署过程的一部分(例如:你做一些事情来部署它们)。如果是这种情况,您是否最适合知道应用程序何时需要重新启动?一方面,并不是每一次代码更改都会保证应用程序重新启动,所以你不会想要自动执行它,我应该认为?
applicationStop()
如果您需要重新启动应用程序,您应该有一个可以运行的脚本。有些人onRequestStart()
检查了一个 URL 参数,applicationStop()
如果它通过了,就会调用它,但我个人认为这是错误的地方。对于几乎每个请求,该条件都是无关紧要的,因此没有必要在百万分之一的情况下检查每个请求是否真正相关。我更喜欢有一个单独的脚本来做这件事,这被称为需要。