김찬진의 개발 블로그

[23/04/25] ObjectProvider와 @PostConstruct의 차이 본문

1일1배움/Spring (김영한 님)

[23/04/25] ObjectProvider와 @PostConstruct의 차이

kim chan jin 2023. 4. 25. 14:36

나:

Spring의 ObjectProvider를 써야하는 이유가 뭐야?


만약 MyLogger객체를 request scope으로 지정했을 때
실제로 client로부터 request객체를 받는 상황을 만들 수 없기 때문에 (배포도 안되었고, 실제 client가 존재할 수도 없다)


@Autowired ObjectProvider<MyLogger> myLoggerObjectProvider 필드를 사용하면 
컨테이너를 MyLogger객체 조회를 지연시키고

실제로 requset객체가 client로부터 넘어왔을 때

즉, MyLogger객체가 만들어질 수 있을 때 

컨테이너가 MyLogger객체를 조회하고 만약 MyLooger객체가 존재하지 않을 때 MyLogger객체를 생성해서 반환해주거나 의존성 주입하는 것을 가능하게 하기 위함이야?


그럼 ObjectProvider와 @PostConstruct 어노테이션의 차이가 뭐야?

 

ChatGPT

ObjectProvider는 Spring Framework에서 지원하는 기능 중 하나로, DI(Dependency Injection) 컨테이너에서 Bean 객체를 생성하고 관리하는 방식에서 객체를 지연 생성하는 기능을 제공합니다.

ObjectProvider를 사용하는 이유는 다음과 같습니다.

1. 지연 생성을 통한 성능 최적화
ObjectProvider를 사용하면 필요한 Bean 객체가 실제로 사용될 때 생성되므로, 불필요한 객체 생성을 방지하고 성능을 최적화할 수 있습니다.

2. 의존성 주입을 미룰 수 있음
ObjectProvider는 DI 컨테이너의 Bean 객체를 생성할 때 의존성 주입을 미룰 수 있습니다. 따라서, 필요한 Bean 객체를 사용하기 전까지 의존성이 해결되지 않아도 됩니다.


@PostConstruct 어노테이션은 Bean 객체가 생성되고 초기화된 이후에 호출될 메서드를 지정하는 어노테이션입니다. ObjectProvider와는 목적과 사용 방법이 다릅니다. @PostConstruct 어노테이션은 Bean 객체의 생성과 초기화 이후에 호출되는 메서드를 지정하고, ObjectProvider는 Bean 객체의 생성을 지연시키고 필요한 시점에 해당 객체를 제공합니다.

따라서, ObjectProvider는 Bean 객체 생성을 지연시키고, @PostConstruct 어노테이션은 생성된 Bean 객체 초기화 이후에 호출될 메서드를 지정하는 용도로 사용됩니다.

Comments