스프링 어노테이션 중에는 @Autowired 가 있는데,
이 어노테이션을 특정 필드에 부여하면 IoC 컨테이너 안에 존재하는 특정 필드와 같은 타입의 Bean을 자동으로 찾아 주입해주게 된다.
※ 스프링 프레임워크에서 의존성을 주입하는 방법(생성자 주입 권장)
1. 필드 주입
- 필드 주입방식은 Class에 속한 Field 위에 @Autowired 어노테이션을 붙여주면 된다.
@Service
public class TestService {
@Autowired
private TestRepository testRepository;
}
2. 수정자 주입
- Setter method를 만들어 준 후 에 @Autowired 어노테이션을 붙여준다.
@Service
public class TestService {
private TestRepository testRepository;
@Autowired
private void setTestRepository(TestRepository testRepository){
this.testRepository = testRepository;
};
}
3. 생성자 주입(Constructor Injection)
- 단일 생성자의 경우 @Autowired 어노테이션을 붙이지 않아도 되지만,
생성자가 2개 이상인 경우에는 생성자에 @Autowired 어노테이션 붙여줘야한다.
@Service
public class TestService {
private TestRepository testRepository;
//@Autowired
private TestRepository(TestRepository testRepository){
this.testRepository = testRepository;
};
}
/*
클래스의 생성자가 하나이고, 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면
@Autowired를 생략해도 주입이 가능하도록 스프링 프레임워크에서 편의성을 제공
*/
✔ 생성자 주입의 장점
1. 순환 참조 방지
2. final 선언이 가능 - 런타임에 객체 불변성을 보장(필드, 수정자 주입은 필드를 final로 선언할 수 없음)
3. 테스트 코드 작성 용이
4. 단일책임의 원칙(SRP)위반 확률을 낮춰줌
*생성자 주입이 아닌 필드주입으로 클래스 내부의 선언된 필드에 @Autowired만 붙여 쉽게 의존성을 주입한다는것은
하나의 클래스가 여러가지 기능을 담당하게 만들기도 쉽다는 의미와 더불어,
생성자 주입은 생성자 파라미터에 사용하고자 하는 필드를 모두 넣어주어야 하기 때문에 코드가 길어지고 경각심을 가질 수 있음
✔ 생성자 주입과 필드/수정자 주입의 차이
| 생성자 주입 | 먼저 생성자의 인자에 사용되는 빈을 찾거나 빈 팩토리에서 만든 다음, 찾은 인자 빈으로 주입하려는 빈의 생성자를 호출(즉, 주입하려는 빈을 먼저 찾고 빈을 생성) |
| 필드/수정자 주입 | 먼저 빈을 생성한 후, 주입하려는 빈을 찾아 주입 (순환참조가 실행될 수 있음) |
[Java] 생성자(Constructor)의 특징
✔ 생성자(Constructor) 란 ? ⁂ 객체가 생성될 때, 자동으로 호출되는 특수목적의 멤버함수(메서드)로, 객체 초기화(객체의 필드값을 설정하는것)를 위해 사용 ⁂ 인스턴스 생성 시에 실행되어야 할
younimini.tistory.com
'웹 > Spring' 카테고리의 다른 글
| [Spring] apache.poi 라이브러리로 구현하는 간단한 Excel Download 기본 (1) | 2024.04.03 |
|---|---|
| [Spring] Spring Controller 메소드 리턴타입 정리 (0) | 2024.01.30 |
| [Spring Boot] 0.3. Filter Check Uri 설정하기(SpringMVC) (0) | 2024.01.24 |
| [Spring Boot] 0.2. MyBatis 연동하기(이클립스/mysql/SpringMVC) (0) | 2024.01.18 |
| [Spring Boot] 0.1.Project 세팅하기(이클립스/spring.io/maven/war) (0) | 2024.01.17 |