[SPRING] SpringBootApplication이 내 서비스를 Autowire하지 않습니다.
SPRINGSpringBootApplication이 내 서비스를 Autowire하지 않습니다.
스프링 부트 초기화에 문제가 있습니다. 간단한 스프링 부트 프로젝트에이 구조가 있습니다.
com.project.name
|----App.java (Annoted with @SpringBootApplication and Autowire MyCustomService)
|----com.project.name.service
|----MyCustomService.java (Annoted with @Service)
SpringBootApplication Annotation에서 scanBasePackages 속성을 설정하려고했지만 작동하지 않습니다. 어쨌든 나는 주석이 달린 @Bean을 가지고 있으며 다음과 같이 응용 프로그램을 실행할 때 로그를 볼 수 있기 때문에 스프링 부팅이 응용 프로그램에 올바르게 삽입되어 있음을 알 수 있습니다.
2019-03-09 15:23:47.917 INFO 21764 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'jobLauncherTaskExecutor'
...
2019-03-09 15:23:51.775 INFO 21764 --- [ Thread-3] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'jobLauncherTaskExecutor'
내 AppClass.java의 기본 스키마
@SpringBootApplication(
exclude = { DataSourceAutoConfiguration.class }
//,scanBasePackages = {"com.project.name.service"}
)
public class App{
private static Logger logger = LoggerFactory.getLogger(App.class);
@Autowired
private static MyCustomService myCustomService;
public static void main(String[] args) {
SpringApplication.run(App.class, args);
...
myCustomService.anyMethod();//NullPointerException
}
}
@Bean
public ThreadPoolTaskExecutor jobLauncherTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(25);
return executor;
}
나는 내가 뭔가를 놓치고 있다고 생각하지만, 일부 가이드를 읽고 있는데 이것에 대해 아무것도 발견하지 못한다.
해결법
-
==============================
1.Spring은 정적 필드를 @Autowire 할 수 없다. ApplicationContext를 사용하여 빈을 얻는다.
Spring은 정적 필드를 @Autowire 할 수 없다. ApplicationContext를 사용하여 빈을 얻는다.
@SpringBootApplication( exclude = { DataSourceAutoConfiguration.class } //,scanBasePackages = {"com.project.name.service"} ) public class App{ private static Logger logger = LoggerFactory.getLogger(App.class); public static void main(String[] args) { ApplicationContext context = SpringApplication.run(App.class, args); MyCustomService myCustomService = (MyCustomService)context.getBean("myCustomService"); ... myCustomService.anyMethod(); } }
또는 CommandLineRunner를 사용할 수 있습니다.
@SpringBootApplication( exclude = { DataSourceAutoConfiguration.class } //,scanBasePackages = {"com.project.name.service"} ) public class App implements CommandLineRunner { private static Logger logger = LoggerFactory.getLogger(App.class); @Autowired private MyCustomService myCustomService; public static void main(String[] args) { SpringApplication.run(App.class, args); } public void run(String... args){ myCustomService.anyMethod(); } }
-
==============================
2.문제는 이전에 해결되었습니다. 아래 링크를 참조하십시오.
문제는 이전에 해결되었습니다. 아래 링크를 참조하십시오.
왜 우리는 봄에 정적 필드를 autowire 수 없습니다
from https://stackoverflow.com/questions/55078382/springbootapplication-does-not-autowire-my-services by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring EL 표현식에 커스터마이징 주석 매개 변수를 전달할 수 있습니까? (0) | 2019.08.01 |
---|---|
[SPRING] ImapMailReceiver 읽기 전용 폴더에 저장 시도 안 함 (실패) [찌그러 뜨림]; (0) | 2019.07.27 |
[SPRING] 왜 Spring 부트 2.1.4에서 2.1.5 로의 변경이 알려지지 않은 설정 Maven 오류를 발생 시키는가? (0) | 2019.07.26 |
[SPRING] 하위 데이터를 저장할 때 지속되도록 분리 된 엔터티 전달 (0) | 2019.07.25 |
[SPRING] AttributeConverter 클래스 내의 Spring 빈에 접근하기 (0) | 2019.07.25 |