Spring
Spring 빈이 아닌 클래스에서 빈 얻기
수앙
2022. 8. 3. 00:00
Spring 에서 간혹
@Component, @Controller, @Service, @Repository, @Bean 선언이 안된
일반클래스에서 스프링 빈을 가져와야 할 때가 있다.
여러가지 방식이 있겠으나 여기서는 그 중 하나의 방법으로 처리함.
1. 빈을 얻을 수 있는 클래스 선언
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextProvider.applicationContext = applicationContext;
}
public static <T> T getBean(String name, Class<T> requiredType) {
return applicationContext.getBean(name, requiredType);
}
}
2. 스프링 빈 클래스
@Component
public class SampleBean {
public void runBean() {
System.out.println("Run bean.");
}
}
3. 스프링 빈을 얻는 일반클래스
public class SampleClass {
public void runClass() {
SampleBean sampleBean = ApplicationContextProvider.getBean("sampleBean", SampleBean.class);
System.out.println("Get bean -> " + sampleBean);
sampleBean.runBean();
}
}
끝.