2011-02-23 2 views
1

후드 아래의 coldfusion에서 cfc가 어떻게 인스턴스화되는지 알고 싶습니다. 나는 당신이 컴포넌트의 인스턴스를 생성하고 새로 생성 된 인스턴스에 대한 참조를 얻을 것이고,이 인스턴스를 사용하여 그 안에있는 public 메소드를 호출 할 수 있다는 것을 알고있다.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의 경우에도 필요하지 않습니다. 그러나, 종종 지역 사회에 의해 채택 된 규칙에 따라 포함되어있는 자바의 생성자를 호출하는 init()를 사용하여 ColdFusion에서의 선택에서 유래. 당신은 new 연산자를 사용하는 경우 *

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

    return this; 
} 

, 당신을 위해 init() 전화 할게 CFC에 init() 메서드가 정의되어 있지 않으면 오류가 발생하지 않습니다.

* Java 메소드를 호출 할 때 init()이 변환되어 Java 클래스의 올바른 생성자를 호출합니다. 클래스의 정적 메서드를 호출하려는 경우 init()없이 직접 메서드를 호출하십시오.

관련 문제