kkkyuhyun / Spring

0 stars 0 forks source link

이슈11.@RequiredArgsConstructor와 @Autowired의 차이점 그리고 기타 어노테이션 #12

Open kkkyuhyun opened 4 weeks ago

kkkyuhyun commented 4 weeks ago

Spring에서는 Bean DI를 지원하는 어노테이션 @Autowired와 @RequiredArgsConstructor가 있다.

@Autowired는 Bean 주입시마다 달아줘야하지만, @RequiredArgsConstructor는 해당 클래스에 달고 private final로 Bean을 주입하면 되서 코드가 깔끔해지고 가독성이 높아진다.

이런 이유로 나는 @RequiredArgsConstructor 사용하고 있었는데 많은 글들이 @Autowired 대신 @RequiredArgsConstructor를 사용하라고 한다.

@Autowired public class AService { @Autowired private BService bService; } @Autowired를 활용한 DI를 필드 주입이라고 한다. 이 Annotation을 특정 필드에 부여하면 Spring IoC Container 안에 존재하는 해당 Type의 Bean을 찾아 자동 주입해준다. 위 코드를 해석하자면 Spring IoC Container가 관리하고 있는 BService 타입의 Bean이 bService 매개변수에 주입되는 것이다.

@RequiredArgsConstructor @Service @RequiredArgsConstructor

public class AService {
    private final BService bService;
}

@RequiredArgsConstructor를 활용한 DI를 생성자 주입이라고 한다. 해당 Class의 생성자를 자동으로 만들어주는 lombok Annotation이다. private final 접근제어자로 선언된 멤버변수를 생성자 파라미터로 넣어준다

kkkyuhyun commented 4 weeks ago

🔳어노테이션 정리 image

image

다음과 같이 에러가 안 뜨려면 @Component 가 있어야 Bean이 생성이 된다.

@Component와 @Bean은 Spring Framework에서 객체를 빈으로 등록하는 두 가지 주요 방식입니다. 두 어노테이션 모두 Spring IoC(인버전 제어) 컨테이너에 빈을 등록하고 관리할 수 있지만, 사용되는 컨텍스트와 방식이 다릅니다 등록 방식:

@Component는 클래스 레벨에서 사용되어 Spring의 컴포넌트 스캔 기능을 통해 자동으로 빈을 등록합니다. @Bean은 메서드 레벨에서 사용되어, @Configuration 클래스 내의 메서드가 반환하는 객체를 빈으로 등록합니다. 사용 범위:

@Component는 주로 클래스의 경우에 사용되며, Spring이 자동으로 빈을 생성하고 관리합니다. @Bean은 주로 @Configuration 클래스 내에서 사용되며, 개발자가 명시적으로 빈을 생성하는 경우에 적합합니다. 이 경우 생성자 주입이나 설정이 필요할 때 유용합니다. 빈의 정의:

@Component는 클래스의 모든 인스턴스를 빈으로 등록하는 반면, @Bean은 메서드의 반환값으로 생성된 인스턴스를 빈으로 등록합니다. 따라서 @Bean을 사용하면 생성 로직을 보다 명시적으로 제어할 수 있습니다.