스프링 컨테이너가 관리하는 자바 객체를 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 |