반응형
코드 내용
📢 의존성 주입 의 종류(생성자, setter, 필드), 역할, 좋은점
📢 의존관계 설정하는 방법(컴포넌트 스캔, 수동으로 빈 등록)
📢 어노테이션 모르는 것
✔️의존관계(DI) 란?
A가 B를 의존한다 → 의존 대상 B가 변하면 그것이 A에 영향을 미친다.
정의
의존관계 주입을 스프링 컨테이너에 등록된 빈(Bean)에서 찾아서 설정하는 방법
컨트롤러가 서비스단에 신경을 안써도 되고 코드를 바꾸지 않아도 의존하는 대상에 변화에 영향을 받는다.
과정
- 스프링 컨테이너가 @Component 를 찾아서 모두 스프링 빈으로 등록
- 의존성이 필요한 부분에서 @Autowired 태그가 있다면 등록된 스프링 빈에서 찾아서 의존관계 주입 설정
//controller
class Controller{
private Service service;
public Controller() {//의존성 주입
service = new Service();
}
}
//service
interface Element {
}
class Service implements Element{
}
✔️의존성 주입의 종류
필드 주입
필드(변수)에 Autowired를 붙여서 자동으로 의존성 주입을 해서 코드는 간결하다는 장점이 있지만 객체 생성 후 변경하기 힘들다.
@Controller
public class Controller {
@Autowired private Service service; //service단
}
setter 주입
setter 메서드가 public 하게 열어둬서 인스턴스 생성 후 언제든지 변경할 가능성이 있다.
@Controller
public class Controller {
private Service service; //service단
@Autowired
public void setController (Service Controller) {
this.service = service;
}
}
생성자 주입
인스턴스를 생성하면서 바로 주입받는다. 인스턴스 하나당 등록되어있는 빈하나를 주입하기 때문에 불변성을 갖는다.
@Controller
public class Controller {
private final Service service; //service단
@Autowired
public Controller (Service service) {
this.service = service;
}
}
✔️의존성 관계(DI) 설정 방법
정형화된 코드를 작성할때는 컴포넌트 스캔방법을 따르고 구현 클래스를 변경해야 되는 경우에는 수동으로 등록해야 됨
수동으로 빈을 생성해서 주입하는 방법
1. Service, Repository 에서 어노테이션을 전부 지우고 SpringConfig 파일에서
빈을 등록한다
2. @Configuration , @Bean을 통해서 빈을 등록한다.
@Configuration
public class SpringConfig {
@Bean
public Service servie() {
return new Service(repository());
}
@Bean
public Repository repository(){
return new MemoryRepository();
}
}
컴포넌트 스캔 방법
Controller, Service, Repository 어노테이션을 붙이면 스프링 컨테이너가 빈으로 등록하고 Autowired 를 통해 인스턴스 생성시 바로 주입됨
@Controller //빈생성
public class Controller {
private final Service service;
@Autowired //의존성 주입
public Controller(Service service) {
this.service= service;
}
}
@Service
public class Service{
private final Repository repository;
@Autowired
public Service(Repository ) {
this.repository= repository;
}
}
@Repository
public class Repository implements MemoryRepository{
}
✔️강의 참고
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
반응형
'공부(Study) > 스프링(Spring)' 카테고리의 다른 글
스프링 DB 연결 및 JDBC Template, JPA (0) | 2022.10.13 |
---|---|
스프링 데이터 객체(domain), Repository, Service, Controller 및 테스트 케이스 (0) | 2022.10.13 |
스프링 컨텐츠 종류 및 동작 방식 (0) | 2022.10.13 |
스프링 프로젝트 생성 및 빌드 방법 (0) | 2022.10.13 |
Infrean 스프링 입문 강의 추천! 김영한님의 모든 것! (0) | 2022.10.05 |