2011-04-05 3 views
0

나는 Spring의 IoC를 사용하여 생성하고 싶은 싱글 톤 클래스를 가지고있다. 이 클래스는 IoC를 사용하여 동적 인 다른 객체를 인스턴스화해야합니다. 따라서이 클래스는 생성자 인수로 전달 된 BeanFactory를 필요로합니다. 어떻게해야합니까?현재 BeanFactory를 생성자 인자로 제공하는 방법

다음은 내가 계획했던 일반적인 구조입니다. 나는 Spring IoC에 상당히 익숙하다. 그래서 Spring에 잘 맞지 않는다면이 구조체를 바꿀 수있다.

public class Main 
{ 
    public static void main(String[] args) 
    { 
     ApplicationContext context = 
       new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"}); 

     MySingletonInterface instance = context.getBean(MySingletonInterface.class); 

     instance.foo(); 
    } 
} 

public class MySingletonClass implements MySingletonInterface 
{ 
    public MySingletonClass(BeanFactory beanFactory) 
    { 
     this.beanFactory = beanFactory; 
    } 

    public void foo() 
    { 
     for(.....) 
     { 
      NeedManyInstances instance = beanFactory.getBean(NeedManyInstances.class); 
      .... 
     } 
    } 
} 

답변

2

가장 쉬운 방법은 (반드시 해당 응용 프로그램 컨텍스트 <context:annotation-config/>is configured for use of annotation-based configuration을) @Autowired로 생성자를 선언하는 것입니다 :

@Autowired 
public MySingletonClass(BeanFactory beanFactory) { ... } 

또 다른 옵션은 클래스가 BeanFactoryAware를 구현하고 생성자 대신 setBeanFactory() 방법을 사용하는 것입니다 .

+0

BeanFactoryAware 솔루션이 잘 작동합니다. 감사! –

관련 문제