2

내 프로젝트에서 picoContainer를 사용하려고합니다. 나는 그것에 대해 거의 알지 못하지만 한 발을주고 싶다.picoContainer 사용 및 이해

필자는 picoContainer와 registercomponents를 만들어야한다고 생각합니다. 나는이

public static PicoContainer getPicoContainer(){ 
    final MutablePicoContainer pico = new DefaultPicoContainer(); 
    pico.registerComponentImplementation(X.class); 
    pico.registerComponentImplementation(A.class); 
    pico.registerComponentImplementation(C.class); 
    pico.registerComponentImplementation(V.class); 
    pico.registerComponentImplementation(T.class); 
    pico.registerComponentImplementation(D.class); 

    return pico; 
} 

지금 내 문제가 어떤 구성 요소가 다른 구성 요소를지는 것은 피코에 핸들을 필요로한다는 것입니다했다. 는 모든 구성 요소에 액세스하려면 그들 각각에 대한 생성자에서, 그래서이

A juicer = pico.getComponent(A.class); 

을 할 필요가, 나는 피코 객체를 전달해야합니까? 나는 이것을 공장으로 쉽게 대체 할 수있다. 그럼 그게 무슨 말이야? 나는 여기서 뭔가를 놓치고 있다고 확신한다. 도움을 주시면 감사하겠습니다.

+1

생성자에 다른 구성 요소가 필요한 구성 요소는 이미 해당 구성 요소의 인스턴스를 가져야합니다. http://picocontainer.codehaus.org/constructor-injection.html - 클래스는 필수 클래스를 생성 할 책임이 없어야하며, 클래스를 주입해야합니다. – zapl

답변

2

일반적인 패턴은 주 컨테이너의 공장을 가지고 있어야합니다. 독립 실행 형 응용 프로그램의 경우에는 "public static void main()"진입 점이 될 것이고, 프런트 컨트롤러 서블릿 또는 필터 또는 컨텍스트 수신기 (피코는 리스너의 경우 지원 클래스가 있음)가 될 것입니다. 그래서 진입 점에서 위에 언급 한 방식으로 컨테이너를 구성하십시오. "public static PicoContainer getPicoContainer()"그런 다음 컨트롤을 컨테이너의 진입 점으로 전달해야합니다. 가장 좋은 방법은 하나 이상의 컨테이너의 구성 요소를 사용하여 라이프 사이클 인터페이스 (http://picocontainer.codehaus.org/lifecycle.html)를 구현 한 다음 컨테이너를 시작()하고 모든 것이 유선으로 연결되도록하는 것입니다. 정상적인 경우 엔 엔트리 구성과 특수한 공장이나 트랜잭션 경계 설정 등과 같은 컨테이너 자체에 접근해서는 안됩니다.