본문 바로가기
스프링

Bean 등록하기

by 리포터12 2022. 12. 19.
728x90

앞선 내용에선 @ComponentScan 과 @Autowired 를 통해 자동으로 객체(Bean) 생성과 의존 주입을 해보았다.

 

자동이 되면 수동되 되겠네?

 

이번에는 자바 코드로 직접 스프링 빈(Bean)을 등록 해보자. 

 

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

@Confituration 통해 등록된 Bean 들이 주입되는 모양

 

 

DI 방식은 생성자 주입, 필드 주입, Setter 주입 등의 방식들이 있음.

 

필드 주입 

- 필드 변수에 @Autowired  로 DI 하는 방식. 

- 변수에 저장된 주소 == 컨테이너에 저장된 빈 주소

- 교체의 여지가 없어 유연하지 못함.

 

Setter 주입

- 빈 객체에 접근하기 위해 메서드가 항상 public 으로 열려 있어야 함.

- 한 번 세팅하고 바꿀 일이 없는데 public setter로 접근을 허용할 이유가 없음.

- 누군가 public 으로 공개된 메서드에 접근해서 데이터 조작하면 답이 없음.

 

생성자 주입

- 객체 생성 시 생성자를 통해 DI 하는 방식

- 보통 private final 로 선언하므로 생성자 외의 접근 방법이 없음.

 

정형화된 Controller, Service, Repository 등은 Component 스캔을 통해 빈으로 등록함.
반면, 정형화 되지 않거나, 상황에 따라 구현 클래스 변경해야 하면 설정을 통해 스프링 빈으로 등록하면서 씀.

 주의!!

@Autowired 를 통한 DI 는 스프링이 관리하는 객체에서만 동작함.

 

 

 

 

728x90

'스프링' 카테고리의 다른 글

콘솔 sql 가독성 살리기  (0) 2022.12.22
API에 원하는 컬럼만 추려서 반환하는 방법  (0) 2022.12.21
컴포넌트 스캔 & DI(Dependency Injection)  (0) 2022.12.19
@ResponseBody  (0) 2022.12.19
[Spring] JPA Auditing  (0) 2022.12.18

댓글