• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

왜 @Configuration의 WebSecurity 클래스에서 생성자 주입을 하지 않나요?

24.03.30 15:26 작성 조회수 104

0

@Configuration

@EnableWebSecurity

public class WebSecurity {

extends WebSecurityConfigurerAdapter {

private UserService userService;

private BCryptPasswordEncoder bCryptPasswordEncoder;

private Environment env;

 

public WebSecurity(Environment env, UserService userService, BCryptPasswordEncoder bCryptPasswordEncoder) {

this.env = env;

this.userService = userService;

this.bCryptPasswordEncoder = bCryptPasswordEncoder;

}
강의에서 보면 @Configuration으로 WebSecurity클래스가 설정되어있기에 userService, bCryptPasswordEncoder, environment 인스턴스가 준비되어 있다고합니다. 따라서 위의 코드와 같이 생성자주입을 하지않는데, 왜 @Configuration으로 설정되어 있으면 @Autowired로 주입을 받지 않아도 되는 걸까요?

답변 1

답변을 작성해보세요.

0

안녕하세요, 이도원입니다.

스프링에서 의존성 주입(Dependency Injection)으로 생성자 주입(Constructor Injection)을 사용할 수 있습니다. 스프링 4.3 이후 부터는 하나의 생성자만 있을 경우 @Autowired 를 붙이이 않아도, 스프링 컨텍스트에서 자동으로 해당 생성자를 사용하여 의존성을 주입할 수 있습니다. (Core container refinements in Spring Framework 4.3)

@Configuration 어노테이션을 사용한 설정 클래스에서 @Bean을 정의하게 되면, 의존성을 주입 받는 생성자를 사용할 수 있습니다.

@Configration
public class AppConfig {
    @Bean
    public MyService myService(MyRepository myRepository) {
        return new MyService(myRepository);
    }
}
-----
@Service
public class MyService {
    private final MyRepository myRepository;
    
    @Autowired // Spring 4.3이후부터는 생략 가능
    public MyService(MyRepository myRepository) {
        this.myRepository = myRepository;
    }
}

혹시, 말씀하신 질문 내용과 다른 답변이었다면 다시 글 남겨주시기 바랍니다. 감사합니다.