[SPRING] @PostConstruct 주석 및 스프링 수명주기
SPRING@PostConstruct 주석 및 스프링 수명주기
나는 봄에 새로운데, 나는 알고 싶다 :
@Component (spring) 주석이 달린 Java 클래스가 있고 내부에 @PostConstruct로 주석 된 메서드가 있습니다. 클래스는 다른 클래스의 @Autowired 주석 필드에 의해 참조됩니다. @PostConstruct가 호출 된 후에 만 클래스가 삽입된다고 가정 할 수 있습니까?
@Component
class AuthenticationMetrics {
private static final MetricRegistry metrics = new MetricRegistry();
final Counter requestsTotal
final Meter guestLogins
final Meter kfUserLogins
final Timer guestLoginResponseTime
final Timer kfLoginResponseTime
@PostConstruct
public void populateMetricsRegistry() {
metrics.counter("authentication.requests.totals")
}
}
해결법
-
==============================
1.해당 빈에서 @PostConstruct가 호출 된 후 발생하는 주어진 클래스의 주입이라고 묻는 경우 대답은 '예'입니다. @PostConstruct는 bean이 "injectable"으로 간주되기 전에 실행됩니다.
해당 빈에서 @PostConstruct가 호출 된 후 발생하는 주어진 클래스의 주입이라고 묻는 경우 대답은 '예'입니다. @PostConstruct는 bean이 "injectable"으로 간주되기 전에 실행됩니다.
모든 빈칸에 대한 주입이 완료된 후 (주어진 빈에) @PostConstruct가 실행되는지 묻는다면, - 예 - @PostConstruct는 주어진 bean에게 주입이 커밋 된 후에 실행됩니다. 이것이 존재하는 이유입니다. 일반적으로 @PostConstruct 액션을 생성자에 넣을 수 있습니다. 그러나 새 객체가 생성되면 (생성자가 호출 될 때) 주입이 아직 수행되지 않습니다. 따라서 주입 된 객체에 의존하는 초기화는 NPE로 인해 실패합니다. 그래서 @PostConstruct가 필요합니다.
-
==============================
2.@PostConstruct, @Resource, @PreDestroy와 같은 주석 처리는 BeanPostProcessor (이 경우 CommonAnnotationBeanPostProcessor)를 통해 수행됩니다. 다음 다이어그램에서 봄부터 BPP가 Dependency Injection 후에 처리되지만 Bean Ready For Use (이는 주사 가능한만큼 의미 있음)를 볼 수 있습니다.
@PostConstruct, @Resource, @PreDestroy와 같은 주석 처리는 BeanPostProcessor (이 경우 CommonAnnotationBeanPostProcessor)를 통해 수행됩니다. 다음 다이어그램에서 봄부터 BPP가 Dependency Injection 후에 처리되지만 Bean Ready For Use (이는 주사 가능한만큼 의미 있음)를 볼 수 있습니다.
from https://stackoverflow.com/questions/44681142/postconstruct-annotation-and-spring-lifecycle by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] iBatis, spring, 실행되는 SQL을 어떻게 로그합니까? (0) | 2019.05.29 |
---|---|
[SPRING] Spring rest controller에서 일반 json body에 액세스하는 방법은 무엇입니까? (0) | 2019.05.29 |
[SPRING] 스트럿을 사용하여 봄에 선택한 메뉴 강조 표시 (0) | 2019.05.29 |
[SPRING] 행렬 매개 변수로 GET 요청 만들기 (0) | 2019.05.29 |
[SPRING] 단위 테스트를 실행할 때마다 내 H2 데이터베이스를 지우는 것은 무엇입니까? (0) | 2019.05.29 |