스프링 컨테이너

김예진·2022년 12월 8일
0

java

목록 보기
14/21

✨스프링 컨테이너란?

-스프링 컨테이너는 스프링에서 자바 객체들을 관리하는 공간을 말함
-자바 객체를 스프링에서 빈(Bean)이라고 하는데, 스프링 컨테이너에서는 이 빈의 생성부터 소멸까지를 개발자 대신 관리해주는 곳이라고 할 수 있음
-스프링 컨테이너는 크게 두 종류로 나눌 수 있다 하나는 BeanFactory이고, 다른 하나는 ApplicationContext
-ApplicationContext 컨테이너가 BeanFactory의 기능을 포괄하면서 추가적인 기능을 제공하기 때문에 대부분의 경우에는 ApplicationContext를 사용함

스프링 컨테이너에 객체(빈) 을 등록하는 이유

-스프링 컨테이너에 객체, 빈을 등록하는 이유는 스프링이 각 객체간 의존관계를 관리하도록 하는데에 큰 목적이 있음
-객체가 의존관계를 등록할 때는 스프링 컨테이너에서 해당하는 빈을 찾고, 그 빈과 의존성을 만듬

@Controller
public class MemberController {

    private final MemberService memberService;

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

@Service
public class MemberService {

    private final MemberRepository memberRepository;
    ...
}

위 코드와 같이 MemberController 클래스에는 @Controller 어노테이션을, 그리고 생성자에 @Autowired를 적어두면, 이 인스턴스는 MemberService와 의존관계를 가진다는 의미를 줌
(단, @Autowired가 정상적으로 동작하려면 두 인스턴스가 빈으로써 스프링 컨테이너에 들어가 있어야 함)

✨스프링 빈

-스프링은 보통의 경우 스프링 컨테이너에 빈 인스턴스를 단 한개만 저장하는 싱글톤 방식을 채택하고 있음
-빈 이름은 항상 다르게 지정이 되어야 함 예상치 못한 여러 오류가 발생하는데, 이를 개발 중 발견하기 매우 어렵기 때문
-스프링 빈을 등록하는 방법은 크게 2가지로 나뉨

1. 컴포넌트 스캔

-@Component 어노테이션을 이용해 사용
-이외에도 스프링 프레임워크에서 제공하는 @Controller나 @Service 혹은 @Repository와 같은 어노테이션은 아래와 같이 인터페이스로 @Component 어노테이션을 받기 때문에 컴포넌트 등록이 가능함

...
@Component
public @interface Service {
	...
}

-단, 실행되는 패키지와 같은 패키지에 있는 클래스에 대해서만 @Component 어노테이션이 적용됨

1. 스프링 빈 직접 등록

-@Configuration@Bean 어노테이션을 사용해 등록

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

0개의 댓글