[BACK-END]/[SPRING]

Spring bean

지기음 2022. 12. 14. 10:46

스프링 컨테이너가 관리하는 자바 객체를 Spring Bean이라고 부른다. 

스프링 빈을 등록하는 방법은 총 2가지가 있다.

1. 컴포넌트 스캔과 자동 의존관계 설정

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

 

자동 의존관계 설정

자동으로 의존관계를 설정해주는 방식이다. 어노테이션 (@) 설정해준다. 가장 편한 방법이 아닐까 싶다.

package hello.hellospring.controller;

import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
public class MemberController {

    // private final MemberService memberService = new MemberService();
    // 이렇게 하면 쓸때마다 생성됨 -> 하나만 생성해서 공용으로 쓰는게 필요

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

@controller 안에 @autowired를 어노테이션 해주어 자동으로 스프링 빈에 등록한다. 이후 memberServie 문서에서도 동일하게 @Autowired해야한다. 저장소에는 @repository 서비스에는 @service어노를 등록하면 된다. 이렇게 되면 

 

스프링 컨테이너

HelloController ------> memberService -------> memberRepository 

이러한 의존관계로 스프링 빈이 등록될 수 있다. 

중요한 점은 스프링 빈은 싱글톤으로 등록한다는 점이다. 

 

자바코드로 직접 설정하기 

자바 코드로 직접 의존관계를 설정할 수 있다. 

pakage안에 SpringConfig파일 을 만든다. 

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();
    }


}

@Configuragion을 어노로 하고 

밑의 의존관계설정에서는 @Bean으로 하고 직접 코드를 작성하면 된다. 

작성된 코드는 

MemberService ------> memberREpository 로 스프링 빈이 등록되었다. 

앞에 Controller는 동록을 안했다.

안한 이유는 앞서 컨트롤러에서 연결했기 때문이다. (이 부분은 spring에서 자동으로 연결해준다고 한다)

 

종요하게 보아야 할 점은 생성자로 연결했다는데. 다른 방식도 많지만(setter등) 이 부분이 제일 안전하기 때문에 생성자로 만든다고 한다. 

 

 

후기 : 블로그에 정리해보니까 어느 부분을 모르는지 딱 알겠다. 

'[BACK-END] > [SPRING]' 카테고리의 다른 글

Spring 개념 및 DI  (0) 2023.04.18
Spring MVC  (0) 2022.12.16
Spring 백엔드 기초 중 기초 [회원관리]-(2)  (0) 2022.12.07
Spring 백엔드 기초 중 기초 [회원관리]-(1)  (0) 2022.12.07
IntelliJ 단축키  (0) 2022.12.05