Iyoungman Back-end Developer

Bean LifeCycle 과 초기화 메서드

2020-05-29

Summary

  • Bean LifeCycle과 DI를 알아본다.
  • 초기화 메서드가 필요한 이유를 알아본다.


Bean의 LifeCycle

image


Constructor

생성자 주입

  • 해당 LifeCycle에 일어난다.
@Service
public class HelloService {

    private ByeService byeService;

    public HelloService(ByeService byeService) {
        this.byeService = byeService;
    }
}

Setter Methods

Setter Method 주입

  • 해당 LifeCycle에 일어난다.
@Service
public class HelloService {

    private ByeService byeService;

    @Autowired
    public void setByeService(ByeService byeService) {
        this.byeService = byeService;
    }
}

BeanPostProcessor.postProcessBeforeInitialization()

@Autowired 주입

  • 해당 LifeCycle에 일어난다.
@Service
public class HelloService {

    @Autowired
    private ByeService byeService;
}

초기화 LifeCycle

초기화 메서드란?

  • DI 작업을 마친 후 실행되는 메서드


아래 3가지 방법으로 Bean의 초기화를 할 수 있다.

1) @PostConstruct
2) InitializingBean.afterPropertiesSet()
3) init-method


의문 : 초기화 메서드의 역할은 무엇일까?

  • 일반적인 Java에서는 Consturctor에서 초기화를 진행한다.
  • 하지만 Spring에서는 어떠한 Bean의 Consturctor 시점에
    의존하는 Bean들이 주입되지 않는 경우가 있다.
  • Setter, Field 주입을 사용하는 경우로 예를 들수 있다.
  • 즉, 이시점에 의존 Bean을 사용할 수 없다.
@Service
public class HelloService {

    @Autowired
    private ByeService byeService;

    public HelloService() {
        System.out.println(byeService);//null
    }

    @PostConstruct
    public void init() {
        System.out.println(byeService);//not null
    }
}


  • 따라서 @Autowired로 의존성 주입이 일어난
    BeanPostProcessor.postProcessBeforeInitialization() Lifecycle 이후에
  • 초기화 메서드를 실행한다.


Reference


Comments

Content