반응형
Spring Tool Suite 4(Spring Boot)
통신을 위한 주소와 포트번호를 Get,Set하며 여러 클래스에서 사용하고 있으며
주소와 포트번호는 언제 바뀔지 모르니 @Autowired 를 이용하여 SettingConfig(Class)를 불러와 사용하고 있다.
그러던 중
New로 생성한 Class에서 @Autowired SettingConfig 는 null이라며
멤버변수로 선언된 주소와 포트번호를 못가져오는 상황이 발생
당장 프로퍼티로 개선하기 위해 다방면 찾아봤으나,
결국 프로퍼티클래스도 Autowired길을 걸어야하는 법
더보기
ConfigurationProperties null
application.yml, application.properties 시도
등등 진짜 온갖거 다해봤음 ㅠ_ㅠ
지난주에 거의 좌절감안고 .. 월요일 맞이
NULL 에러만 여러 차례보다가 Bean을 주입받는 방법을 발견
ApplicationContextProvider.java
- ApplicationContext를 여러 곳에서 인스턴스로 사용하면 문제가 발생할 수 있어 임의의 클래스를 생성한다.
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 ctx) throws BeansException {
// TODO Auto-generated method stub
applicationContext = ctx;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
}
BeanUtils.java
- Bean을 주입받는 메소드
- 주석처리된 코드가 있는데 사용가능한 코드다만, 나는 개선된 getBean을 적용해보았다.
import org.springframework.context.ApplicationContext;
import lombok.experimental.UtilityClass;
@UtilityClass
public class BeanUtils {
public static <T> T getBean(Class<T> classType){
ApplicationContext applicationContext = ApplicationContextProvider.getApplicationContext();
return applicationContext.getBean(classType);
}
// public static Object getBean(Class<?> classType){
// ApplicationContext applicationContext = ApplicationContextProvider.getApplicationContext();
// return applicationContext.getBean(classType);
// }
}
이렇게 되면 준비는 끝
autowired Class is null이 문제가 되었던 코드로 돌아가 해결한다.
Test Sample 코드
- getBean 메소드의 파라메터로 주입할 Class를 전달하면 됨
public class RbSubscriber extends RabbitMQClient {
.
.
// @Autowired SettingConfig settingConfig;
private SettingConfig settingConfig;
protected void workerThreadStart(){
settingConfig = BeanUtils.getBean(SettingConfig.class);
System.out.println(settingConfig.getAddress());
System.out.println(settingConfig.getPort());
}
}
상세한 글 덕분에 문제해결하고 기록중
자세한 정보는 하기 링크를 참조
728x90
반응형
'개발아닌개발 > springboot' 카테고리의 다른 글
라디오 설정값 가져와서 Class 속성 추가하기 (0) | 2022.01.12 |
---|---|
타임리프(thymeleaf) 라디오 버튼의 초기값 설정하기 (0) | 2022.01.12 |
간단하게 Height 100%로 PDF viewer 만들기(PDFObject) (0) | 2022.01.05 |
SpringSecurity 패스워드 암호화 대신 sha512 사용하여 로그인 (0) | 2021.12.15 |
[오류] Web server failed to start. Port 8080 was already in use. (0) | 2021.11.23 |
댓글