2013-07-03 6 views
2

연구 프로젝트에서 Picocontainer를 사용하고 있습니다. 나는 그것을 사용하는 방법에 대한 의문을 가지고 있습니다.PIcocontainer 사용 방법

다음은 클래스 내가 가진 :

public class DependencySupplier { 

    public static MutablePicoContainer pico; 

    static { 
     pico = new DefaultPicoContainer(); 
     pico.registerComponentImplementation(CollectionDao.class, CollectionDaoImpl.class); 
     pico.registerComponentImplementation(ReadingDao.class, ReadingDaoImpl.class); 
     pico.registerComponentImplementation(CollectionDetails.class, CollectionDetailsImpl.class); 
     pico.registerComponentImplementation(Reading.class, ReadingImpl.class); 
    } 

    public static CollectionDao getCollectionDao() { 
     return (CollectionDao) pico.getComponentInstance(CollectionDao.class); 
    } 

    public static ReadingDao getReadingDao() { 
     return (ReadingDao) pico.getComponentInstance(ReadingDao.class); 
     } 
    } 

내 의문입니다

  1. 이 피코를 사용하는 올바른 방법인가? 나는 '주소 1'과 '주소 2'로 위의 구현과 주소 객체를 생성 할 수 있습니까

이있다

public class AddressImpl implements Address { 

    private String address1; 
    private String address2; 
    private String address3; 
    private String address4; 

    public AddressImpl(String address1, String address2, String address3, 
     String address4) { 
     super(); 
     this.address1 = address1; 
     this.address2 = address2; 
    } 

    public String getAddress1() { 
     return address1; 
    } 
    public void setAddress1(String address1) { 
     this.address1 = address1; 
    } 
    public String getAddress2() { 
     return address2; 
    } 
    public void setAddress2(String address2) { 
     this.address2 = address2; 
    } 
    public String getAddress3() { 
     return address3; 
    } 
} 
는 사용자가 제공하고 사용할 수 있습니다 다음과 같이
  • AddressImpl 클래스입니다 실행 시간에?

  • 답변

    1

    글쎄, 실제로는 대부분의 경우

    직접 피코 컨텍스트에서 구성 요소를 조회해서는 안 ... 피코를 사용하는 올바른 방법이 아니다.

    DAO, 서비스, 기타 논리 클래스를 pico에 등록해야합니다 ... 생성자 인수로 선언 한 참조 된 DAO 등을 가져와야합니다. 그런 다음 컨테이너에서 주 논리 클래스를 가져 와서 해당 메서드를 호출해야하는 구성 요소를 등록하는 부트 스트랩 클래스 (또는 시작 가능 수명주기) 주소 인스턴스의 경우 피코에서 인스턴스화해야하는지 잘 모르겠습니다. (컨테이너가 주소에 대해 수행 할 수있는 종속성이 표시되지 않기 때문에 어떤 점을 알 수 있습니까?)

    그래도 필요한 경우 pico.registerComponentInstance (새 AddressImpl())와 같은 준비 인스턴스를 등록 할 수 있습니다. .)) 그러면 생성자 인수 Address [] addrs를 사용하여 사용 가능한 모든 인스턴스를 주입 할 수 있습니다. 피코에서 직접 여러 인스턴스를 인스턴스화하는 또 다른 방법이 있습니다.하지만 필요가 없다고 생각합니다.