스프링 빈이란?

스프링이 객체를 생성해 들고 있는다.

즉, 스프링 컨테이너가 생성될 때 컨트롤러(빈)가 같이 생성된다.

 

why?

객체를 계속 생성할 필요가 없고 미리 생성해 그것을 사용한다.

 

빈과 의존관계

 

컨트롤러(@Controller) -> 서비스

컨트롤러로 요청이 들어오면 서비스를 통해 비즈니스 작업을 해야 하기에 컨트롤러가 서비스에 의존한다.

 

의존관계 주입방법

컨트롤러, 서비스를 다 빈으로 등록해준다.

의존관계를 생성할 땐 @Autowired를 사용한다.

 

빈등 록 방식

1. 컴포넌트 스캔

2. 자바 코드로 스프링 빈 등록

 

빈 등록은 메인 메서드가 있는 패키지부터 시작한다.

즉, 하위 패키지에 있는 것만 등록된다.


자바 코드로 빈 등록하기

 

@Configuration

public class SpringConfig {



    @Bean

    public MemberService memberService() {

        return new MemberService(memberRepository());

    }



    @Bean

    public MemberRepository memberRepository(){

        return new MemoryMemberRepository();

    }

}

애노테이션으로 등록하기

@Aspect
@Component
public class TimeTraceAop {

    @Around("execution(* hello.hellospring..*(..))")
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start =  System.currentTimeMillis();
        try {
            return joinPoint.proceed();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println(joinPoint.toString()+" / timeMs : "+timeMs+"ms");
        }

    }
}

@Component,@Service,@Repository 대신 자바로 등록할 수 있다.

정형화된 코드(@Service,@Repository)는 컴포넌트 스캔을 사용한다.

 

또, 생성자로 빈을 생성하는 게 제일 안전하다.

    private final MemberRepository memberRepository;
	
    //생성자
    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

+ Recent posts