Programming/Spring

Autowired

사랑우주인 2024. 12. 11. 23:07

@Autowired 빈 주입 방식 3가지

  • 생성자
  • 필드
  • Setter

@Autowired와 빈 주입 과정 이해

@Autowired로 빈을 주입할 때, required = false 옵션을 사용하면 빈 주입이 이루어지지 않아도 객체가 생성될 수 있다. 하지만 생성자 주입 방식은 주입할 빈이 반드시 필요하므로, 주입 대상 빈이 없으면 객체 생성에 실패한다.

@Component
public class ExampleService {

    private final DependencyService dependencyService;

    // 생성자 주입
    @Autowired
    public ExampleService(DependencyService dependencyService) {
        this.dependencyService = dependencyService;
    }

    @PostConstruct
    public void setup() {
        // PostConstruct 단계에서 dependencyService는 이미 주입된 상태
        System.out.println("DependencyService has been injected: " + dependencyService);
        dependencyService.performAction();
    }
}

@Autowired를 통한 빈 주입은 AutowiredAnnotationBeanPostProcessor에 의해 이루어진다. 이 작업은 Spring 생명주기의 postProcessBeforeInitialization 단계에서 실행된다. 따라서 @PostConstruct로 실행되는 메서드에서는 이미 빈이 주입된 상태로 실행된다.

AutowiredAnnotationBeanPostProcessor
BeanFactory