2011-02-23 31 views
1

我想知道一个cfc是如何在coldfusion下实例化的!我知道你创建了一个组件的实例,你会得到一个对新创建的实例的引用,你可以用它来调用它们中的公共方法。ColdFusion CFC实例创建的生命周期是什么?

但是,当我写个代码

<cfscript> 
person = createObject('component','human') // what happen here!!!! 
person.speak(); 
</cfscript> 

提出了一些修正,我在这里的讲话!究竟发生了什么。为什么我问这个问题的原因是因为我有存储在应用范围实例,该实例是非常高负载下使用如下

application.person.speak(); 

现在。我发现内存不是为obj发布的,并且在某些时候达到了200mb ..奇怪! 。如此作出的修正,因为它说,在最佳实践

request.person = duplicate(application.person); 

现在还有另一种直接的方式做,这是

request.person = createObject('component','human'); 

区别,第一个创建对象并保持它在份额范围内,做一个深层副本,每次请求时都会请求(这里只创建一次实例)。其次,每次请求都会创建实例。它们之间存在性能差异,因为在第二种方法中,每次都创建实例。我想知道创建一个实例后面的架构究竟是什么,使前者变得更好!

只想知道!

回答

0

从我的理解,它运行的是CFC里面的init方法/函数,然后运行该讲方法/函数。

0

发生了什么?没什么特别的。

对于CFC,init()只是一个用于初始化实例的方法。如果您不需要构造函数,甚至不需要CFC。然而,它往往是由社会通过约定包括,源于ColdFusion的选择使用init()用于调用Java的构造。*

function init() 
{ 
    // init vars in Variable scope if needed... 

    return this; 
} 

在CF9,当您使用new运营商,它会调用init()为你如果可用,并且如果您的CFC没有定义方法init(),它不会抛出任何错误。

*当调用Java方法时,init()被转换为调用Java类的正确构造函数。如果您只想调用该类的静态方法,请直接调用该方法,而不使用init()

相关问题