스프링 부트 BEAN등록, 의존성 주입 방식

이동복·2021년 12월 31일
0

스프링 기초공부

목록 보기
2/5
post-thumbnail

Bean등록


  • 스프링 컨테이너라는 큰 박스에 해당 클래스를 등록시킨다. 등록된 클래스들은 다른 클래스에서 사용이 가능하다. 또한 bean으로 등록된 객체는 기본적으로 스코프가 ‘싱글톤’으로 정해진다.
  • 싱글톤 : 객체가 하나만 만들어짐. 재사용하여 메모리를 절약하며, 런타임시 성능 최적화에 유리하다. 특히 데이터베이스와 관련된 객체들은 필드가 많기 때문에 만드는 비용이 많이 들기 때문에 싱글톤이 효율적이다.

어노테이션 등록방식(컴포넌트 스캔)


@Service
public class MemberService {

    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
  • 클래스 바로 위에 @Component 어노테이션을 붙인다. 그럼 스프링이 컴포넌트 스캔을 통해 해당 클래스를 등록시킨다. 위의 코드는@Service내부에 @Component가 포함되어있다.(간편, 고정적)

자바코드 등록방식


@Configuration
public class SpringConfig {

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

    @Bean
    public MemberRepository memberRepository(){
        return  new MemoryMemberRepository();
    }
 }
  • 클래스를 생성하고 @Configuration 과 @Bean을 사용하여 직접 자바로 등록시킬 수 있다. 이 때에도 Configuration 어노테이션 내부에 @Component가 존재한다. 새로운 db로 교체할 때에 직접 코드를 바꾸지 않고 해당 부분만 교체하는 방식으로 쓰인다.(불편, 좀 더 유연)

의존성 주입: DI


어떤 객체가 다른 객체를 의존하는 관계에 있을때, 다른 객체를 생성(new)하여 사용하는 것이 아닌 해당 객체를 주입받아서 사용하는 방법이다. 필드주입방식과, setter주입방식, 생성자 주입방식이 있다.

필드 주입 방식


@Autowired private MemberRepository memberRepository;

바로 @Autowired 어노테이션을 붙여 해당 클래스를 고정적으로 주입한다. 다른 클래스와 교체할 수 가 없다는 단점이 있어서 거의 사용되지 않는다.

setter 주입 방식


private MemberRepository memberRepository;

public void setMemberRepository(MemberRepository memberRepository) {
    this.memberRepository = memberRepository;
}

setter를 통해 클래스를 주입시킨다. 클래스를 유동적으로 바꿀 수 있다는 장점이 있으나, public이기 때문에 위험하고, 중간에 class를 변경시킬 이유가 거의 없으므로 지양한다.

생성자 주입 방식


@Service
public class MemberService {
		private final MemberRepository memberRepository;
		
		@Autowired
		public MemberService(MemberRepository memberRepository) {
		    this.memberRepository = memberRepository;
		}

가장 많이 쓰이는 생성자 주입 방식이다. 생성자를 통해 해당 클래스를 주입받는다. 수동적으로 주입받는다는 특성이 있으며, 중간에 변경이 불가해 적절하게 유연한 방법으로 가장 많이 사용된다.

profile
아는것 하나 없는 유기물 덩어리

0개의 댓글