Skip to main content

스프링 빈과 의존관계

·159 words·1 min· loading

@Controller

스프링이 시작될때, 객체를 생성

스프링 컨테이너에서 빈을 관리한다고 부름

@Autowired

스프링 컨테이너의 memberService를 가져와서 연동한다

@Service

스프링이 올라올때 컨테이너에 등록해줌

@Repository

스프링에 repository 등록

전부 @Component 가능

스프링 빈을 등록하는 2가지 방법

어노테이션 사용

@component 어노테이션이 있으면 스프링 빈으로 자동 등록한다

@controller 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다

@controoler, @Service, @Repository 모두 @component 하위임

hello.hellospring 하위 패키지가 아니면, 등록안해줌

스프링은 기본적으로 싱글톤으로 동작(유일하게 하나만 등록해서 공유)

따라서, 같은 스프링 빈이면 모두 같은 인스턴스이다.

자바코드사용

Springconfig.java라는 새 파일을 만든다 이름상관없음

@Configuration, @Bean 이용

package hello.hellospring;import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class SpringConfig {    @Bean    public MemberService memberService(){
        return new MemberService(memberRepository());    }        @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();    }}

뜰때 memberService와 memberRepository를 둘 다 스프링 빈에 등록하고,

memberService의 생성자에 memberRepository를 넣어준다.

DI (dependency injection) 의 3가지 방식

생성자 주입 - 생성자를 통해서 들어오는거 **권장됨

필드주입 - 그냥 필드에다가 들어오는거

setter주입 -setter을 통해서 주입

%주의% Autowired는 Bean에 등록된 개체가 아니면 동작하지 않음