[SPRING] 스프링 부트 이해 @Autowired
SPRING스프링 부트 이해 @Autowired
봄 부츠 어노테이션 @Autowired가 올바르게 작동하는지 이해할 수 없습니다. 다음은 간단한 예입니다.
@SpringBootApplication
public class App {
@Autowired
public Starter starter;
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
public App() {
System.out.println("init App");
//starter.init();
}
}
--
@Repository
public class Starter {
public Starter() {System.out.println("init Starter");}
public void init() { System.out.println("call init"); }
}
이 코드를 실행하면 init app 및 init Starter 로그가 생성되므로 봄에이 객체를 만듭니다. 하지만 App의 Starter에서 init 메소드를 호출하면 NullPointerException이 발생합니다. 내 객체를 초기화하기 위해 @Autowired 주석을 사용하면 더 할 일이 있습니까?
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'app': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [{package}.App$$EnhancerBySpringCGLIB$$87a7ccf]: Constructor threw exception; nested exception is java.lang.NullPointerException
해결법
-
==============================
1.App 클래스의 생성자에서 init 메소드를 호출하면 Spring은 App 객체에 종속성을 자동으로 제공하지 않습니다. Spring이 App 객체의 생성과 autowiring을 완료 한 후에이 메소드를 호출하려면, 다음과 같이 @PostConstruct 주석을 가진 메소드를 추가하십시오.
App 클래스의 생성자에서 init 메소드를 호출하면 Spring은 App 객체에 종속성을 자동으로 제공하지 않습니다. Spring이 App 객체의 생성과 autowiring을 완료 한 후에이 메소드를 호출하려면, 다음과 같이 @PostConstruct 주석을 가진 메소드를 추가하십시오.
@SpringBootApplication public class App { @Autowired public Starter starter; public static void main(String[] args) { SpringApplication.run(App.class, args); } public App() { System.out.println("constructor of App"); } @PostConstruct public void init() { System.out.println("Calling starter.init"); starter.init(); } }
from https://stackoverflow.com/questions/38476486/understanding-spring-boot-autowired by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 데이터 : 관리되지 않는 유형 : class java.lang.Object (0) | 2019.04.05 |
---|---|
[SPRING] Spring과 DelegatingFilterProxy에 @Autowired (0) | 2019.04.05 |
[SPRING] @SpringBootApplication을 STS의 유형으로 확인할 수 없습니다. (0) | 2019.04.05 |
[SPRING] Spring JUnit 테스트에서 자동 모의 인스턴스 생성 (0) | 2019.04.05 |
[SPRING] Spring에 다중 트랜잭션 관리자가있는 다중 데이터 소스 (0) | 2019.04.04 |