2011-02-23 9 views
1

私はフードの下でcoldfusionでcfcがどのようにインスタンス化されるのか知りたいです!私はあなたがコンポーネントのインスタンスを作成することを知っているし、新しく作成されたインスタンスへの参照を取得し、それを使用してそのインスタンス内のパブリックメソッドを呼び出すことができます。ColdFusion CFCインスタンス作成のライフサイクルはどのくらいですか?

しかし、正確に何が起こっている私は番目のコードを書く

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

は、ここに私の文にいくつかの修正を作った!!!。私は、アプリケーションスコープに保存されているインスタンスを持っているので、私はこの質問をする理由があるとインスタンスは、非常に高い負荷の下で今

application.person.speak(); 

以下のように使用されています。私はメモリが人objのためのリリースではないことを発見し、いくつかの時点でそれは200 MBに達した..奇妙な! 。それは

request.person = duplicate(application.person); 

が今これを行うには、別の直接的な方法はあり

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

差は、最初のものはオブジェクトを作成し、共有スコープに保管されているベストプラクティスに言うようにそう、補正を行いましたリクエストが行われるたびにリクエストするディープコピー(ここではインスタンスは1回のみ作成されます)。 2番目は、要求が行われるたびにインスタンス作成を行います。 2番目の方法ではインスタンスが毎回作成されるため、それらの間にはパフォーマンスの違いがあります。私は、前者がそれほどうまくいかないインスタンスを作成する背後にあるアーキテクチャーが正確に何であるかを知りたいと思います。

ちょうど知っているキュリー!

答えて

3

ColdFusionはJavaにコンパイルされ、 "createObject"関数を呼び出すと、そのクラスのインスタンスが作成されます。ここではもう少し説明するのに役立つかもしれないいくつかのリンクです:私が理解から

http://www.bennadel.com/blog/325-ColdFusion-CreateObject-vs-Java-NewInstance-.htm

http://blog.objectorientedcoldfusion.org/2009/07/16/coldfusion-9-object-creation-performance/

+0

Edits Danに感謝します。 –

0

、それはその後、発言方法/機能を実行し、そのCFC内のinitメソッド/関数を実行しています。

0

何が起こりますか?本当に特別なものはありません。

CFCの場合、init()は、インスタンスの初期化に使用される単なる方法です。あなたがコンストラクタを必要としないなら、CFCのために必要なことさえありません。しかし、それは多くの場合、コミュニティによって採用された規則によって含まれている、Javaのコンストラクタを呼び出すためのinit()を使用してのColdFusionのの選択から始まりました。あなたはnew演算子を使用する場合*

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

    return this; 
} 

、それはあなたのためinit()を呼ぶことにしますCFCにinit()メソッドが定義されていない場合はエラーをスローしません。

* Javaメソッドの呼び出しに関しては、init()が変換されてJavaクラスの正しいコンストラクタが呼び出されます。クラスの静的メソッドを呼び出す場合は、init()を使わずに直接メソッドを呼び出します。

関連する問題