2013-08-30 5 views
-1

저는 PDF 인보이스를 생성하는 클래스의 계층 구조를 가지고 있습니다. 기본적으로 모든 클래스는 인보이스를 생성하는 데 필요한 모든 메소드가있는 인터페이스를 구현합니다.
문제는 모든 클라이언트의 클래스 이름이 데이터베이스에 저장되므로 인스턴스화해야하는 구체적인 클래스가 런타임에 결정된다는 것입니다.
은 지금은 장소에 이런 일이 : 스프링 및 동적 객체 생성

String pdfProcessorClass = "PdfParserXXX"; 
    pdfProcessorClass = pdfProcessorClass.trim(); 
    Invoic2Pdf pdfGenerator; 
    try { 
      Class<?> forName = Class.forName(pdfProcessorClass); 
      pdfGenerator= (Invoic2Pdf) forName.newInstance(); 
      pdfGenerator.init(xXx, yYy); 

     } catch (Exception e) { 
      //deal with exception 
     } 

는 동적으로 생성 될 필요가 이러한 클래스는 봄 콩 자체는 것을 봄의 IoC를 고려하여 더 우아한 방법으로 이것을 달성하기 위해있는 posibility이있다 ?

답변

1

스프링의 IoC 기능은 대부분 BeanFactory 인터페이스에서 제공됩니다.

이 인터페이스와 해당 구현 (AFAIK)에는 String 클래스 이름으로 bean을 만드는 메소드가 없습니다. 어쨌든 Class 인스턴스를 얻으려면 구문 분석하고 Class.forName(String)을 사용해야합니다.

일단 클래스를 생성하면 Spring을 사용하여 bean을 생성 할 수 있습니다.

Class<?> forName = Class.forName(pdfProcessorClass); 
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("yourContext.xml"); 
pdfGenerator = context.getBeanFactory().createBean(forName); 

또는 오버로드 createBean() 방법. 자세한 내용은 here을 참조하십시오.