개발놀이터

DI와 스프링빈 본문

Spring/Spring

DI와 스프링빈

마늘냄새폴폴 2021. 8. 13. 15:25

Controller : 컨트롤러를 통해서 외부 요청을 받고

Service : 서비스에서 비즈니스 로직을 만들고

Repository : 리포지토리에서 데이터를 저장하고 

=정형화된 패턴


Autowired : 내가 현재 작업하는 클래스에서 다른 클래스의 객체를 사용하고 싶을 때는 현재 작업하는 클래스에서 new 하고 객체를 다른 클래스의 객체를 만드는 것이 아니라

private final 다른클래스 객체명; 이렇게 선언해 준 뒤에

@Autowired
public 현재작업중인클래스(다른클래스 객체명){
this.객체명 = 객체명
}

이렇게 구현하면 된다. => 해당 방법은 Dependency Injection 즉 DI중 생성자 주입이라고 부른다.

*DI란? 
의존성 주입이라고 표현하고 DI에는 세가지 주입이 있다.

1. 필드주입
2. setter 주입
3. 생성자 주입

1. 필드 주입은 필드에 선언된 private한 변수에 @Autowired를 붙여주는 주입으로 한번 주입한 의존성이 바뀌지 않는데 이러한 코딩 방식은 지양해야 한다. 마치 필드에서
선언과 동시에 초기화 하는 상황과 같은 상황

2. setter 주입은 private한 변수를 setter를 이용하여 만들어주고 @Autowired를 붙여주는 주입으로 단점은 모든 개발자가 해당 메서드에 접근할 수 있기 때문에 지양해야 한다.
최대한 적은 개수의 메서드에 접근할 수 있어야 한다.

3. 생성자 주입은 private한 변수를 setter 주입과 비슷하게 주입을 하는데 생성자를 통해서 주입이 된다. 이렇게 생성자를 통해 주입이 되면 spring이 한번 호출할 때 한번만
호출되는 장점이 있기 때문에 생성자 주입을 사용하는 것이 좋다.



*스프링 빈을 등록하는 두가지 방법
1. 컴포넌트 스캔과 자동 의존관계 설정
2. 자바 코드로 직접 스프링 빈 등록하기

1. 컴포넌트 스캔 : @Controller, @Autowired, @Service, @Repository 이렇게 어노테이션을 지정한것이 바로 컴포넌트 스캔 방식
= 각 어노테이션에 들어가보면 @Component(어노테이션이 있으면 스프링 빈으로 자동 등록된다)라고 붙어있다.

2. 자바코드로 직접 스프링 빈 등록하기 : 빈(Bean) 클래스를 따로 만들어서 @Configuraion어노테이션을 클래스 위에 붙인다. 그리고 메소드를 만드는데 각 메소드에 @Bean을
붙여서 만든다. 각 메소드는 return 값으로 해당 객체를 넘겨주도록 설정한다.

실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화되지 않았거나 사항에 따라 구현 클래스를 변경해야 한다면
설정을 통해 스프링빈으로 등록한다.

'Spring > Spring' 카테고리의 다른 글

스프링 빈 생명주기 콜백  (0) 2021.08.16
스프링 @Autowired, @Component, @Qualifier, @Primary  (0) 2021.08.15
스프링빈 조회  (0) 2021.08.13
Spring 테스트클래스  (0) 2021.08.10
커스텀 태그 만들기  (0) 2021.07.29