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);
}
}
실행 결과