SpringFramework/Spring

동적 빈 생성

lovineff 2021. 7. 7. 17:40

Spring에서 제공하는 ConfigurableListableBeanFactory 클래스를 이용하여 동적으로 빈 등록이 가능하다.

 

동적 생성할 클래스 선언

public class DynamicClass {
	// 빈 등록시 생성자 호출여부 확인용
    public DynamicClass() {
        System.out.println("생성자 호출!");
    }

    public void func(){
        System.out.println("Test");
    }
}

 

테스트 코드를 통한 동적 빈 생성 및 조회

@SpringBootTest
public class DynamicClassTest {
    @Test
    void test(){
        StaticApplicationContext staticApplicationContext = new StaticApplicationContext();

        // 등록 전 빈 조회
        String[] beforeBeans = staticApplicationContext.getBeanNamesForType(DynamicClass.class);
        assertTrue(beforeBeans.length == 0);

        // 빈 등록
        ConfigurableListableBeanFactory beanFactory = staticApplicationContext.getBeanFactory();
        beanFactory.registerSingleton("dynamicClass", new DynamicClass());

        // 등록한 빈 조회 (by type)
        String[] afterBeans = staticApplicationContext.getBeanNamesForType(DynamicClass.class);
        assertTrue(afterBeans.length > 0);
        for (String beanName : afterBeans) {
            System.out.println(beanName);
        }

        // 등록한 빈 조회 (by bean name)
        Object dynamicClass = staticApplicationContext.getBean("dynamicClass");
        assertNotNull(dynamicClass);
        assertTrue(dynamicClass instanceof DynamicClass);
    }
}

 

실행 결과