개인공부/[Spring] / / 2020. 12. 24. 15:03

스프링 빈과 의존관계

Spring Contianer에 객체를 등록하는 방법과

-컴포넌트 스캔

-자바코드로 직접 스프링 빈 등록

 

의존관계설정을 정리하려한다.

-Autowired

.

 

Spring은 객체를 매번 생성하지않고 Spring container에 객체를 생성하여 반복적으로 사용한다.

예를들어 Service같은 경우 매번 새로운 객체를 만들 필요없이 사용한 객체를 계속 쓰면 되기때문에 Spring container에 등록하고 반복적으로 사용한다.

 


Spring Container 등록

 

1.컴포넌트 스캔

 

Spring 실행시 Srping Container라는 통이 생김, 이때 

@ComponentScan이 @Component어노테이션이 붙은 객체를 모두 찾아서 SpringContainer에 등록한다.

 

그래서 여태 사용했던 @Controller, @Service, @Repository 내부를 보면(Ctrl+좌클릭) @Component 어노테이션이 붙어있다.

@Controller
public class MemberController {
    private final MemberService memberService;


    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}
@Service
public class MemberService {

    private final MemberRepository memberRepository;

    @Autowired //의존관계설정
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
        
    }
@Repository
public class MemoryMemberRepository implements MemberRepository{
	private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;
}

 

만약 @Service 어노테이션을 붙이지 않으면 MemberController는 의존관계 설정시 Memberservice를 못찾음.

MemberService를 @Service로 스프링빈에 등록을 해주어야 함

MemberRepository를 의존관계 설정할때도 마찬가지이다. @Repository로 스프링빈에 등록해주어야한다.

 

1.1컴포넌트 스캔의 범위

기본적으로는 @SpringBootApplication 하위 디렉토리에서만 찾음.

이 외의 주소에서 찾으려면 다른 설정이 필요하다함

 

 

2.자바코드로 스프링 빈 직접 등록하기

 

SpringConfig

Configuration 클래스를 만들어준다.

 

@Configuration
public class SpringConfig {
    
    @Bean
    public MemberService memberService{
        return new MemberService(memberRepository());
    }
    
    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
}

 

@Bean 어노테이션을 이용하여 스프링빈 직접 등록

 

참고할 점: 스프링은 스프링 컨테이너에 스프링 빈을 등록할때 , 기본적으로 싱글턴으로 등록한다.

따라서 같은 스프링 빈이면 모두 같은 인스턴스이다. 설정으로 다른 패턴으로 설정할 수 있지만 대부분 싱글턴 사용


의존관계 설정

 

@Autowired를 통하여 의존관계를 설정할 수 있다.

 

@Controller
public class MemberController {
    private final MemberService memberService;


    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

위에서 봤듯이 @Autowired를 통해 의존관계를 설정하고 있다. 

 

Spring Container에 있는 memberService를 가져다 연결 시켜준다.

 

결과적으로

스프링빈 등록과 @Autowired를 통해

Controller -> Service ->Repository 형태로 의존관계가 성립이 된다.

 

 

'개인공부 > [Spring]' 카테고리의 다른 글

[Spring] 스프링 URI 매칭 방법  (0) 2020.12.17
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유