티스토리 뷰
* JAVA Beans: 재사용 가능한 컴포넌트, 상태, getter&setter
* Servlet & JSP bean: MVC의 Model, EL, scope, JSP Container가 관리
* EJB(Enterprise Java Beans): 복잡한 규칙, EJB container가 관리
* Spring Bean: POJO(Plain Old Java Object), 단순, 독립적, Spring Container가 관리
* Bean: Spring Container가 관리하는 객체
* Spring Container: Bean 저장소, Bean을 저장, 관리(생성, 소멸, 연결)
- BeanFactory: Bean을 생성, 연결 등의 기본 기능을 정의
- ApplicationContext: BeanFactory를 확장해서 여러 기능을 추가 정의
* DI(Dependency Injection): 의존성 주입
- spring이 다른 프레임워크와 차별화되어 제공하는 의존관계 주입 기능으로 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입 시켜주는 방식
- DI를 통해 객체 간의 결합도가 낮아지고 유연성은 높아진다.
- 의존성 예시
import org.springframework.stereotype.Service;
@Service
public class BookService {
private BookRepository bookRepository;
public BookService(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
}
위 코드와 같이 BookService가 만들어지기 위해서는 BookRepository를 필요로 한다. 이것을 BookService는 BookRepository의 의존성을 가진다 라고 한다. 애플리케이션 런타임에 외부에서 실제 구현 객체를 생성하고 클라이언트에전달해서 클라이언트와 서버의 실제 의존관계가 연결 되는 것이다. 클라이언트 코드를 변경하지 않고, 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다. 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스를 쉽게 변경할 수 있다.
* @Autowired: Spring container에서 타입으로 빈을 검색해서 참조 변수에 자동 주입(DI), 검색된 빈이 n개이면 그 중에 참조변수와 이름이 일치하는 것을 주입. 주입 대상이 변수일 때, 검색된 빈이 1개 아니면 예외 발생. 주입 대상이 배열일 때, 검색된 빈이 n개라도 예외 발생X
* @Resource: Spring container에서 이름으로 빈을 검색해서 참조 변수에 자동 주입(DI), 일치하는 이름의 빈이 없으면 예외 발생.
* @Component: 클래스를 자동 검색해서 빈으로 등록
* 정리
- 두 객체 간의 관계라는 관심사를 분리
- 두 객체 간의 결합도를 낮춤
- 객체의 유연성을 높임
- 테스트 작성을 용이하게 함
참조: https://mangkyu.tistory.com/150, https://devlog-wjdrbs96.tistory.com/165
'SPRING' 카테고리의 다른 글
@ExceptionHandler, @ControllerAdvice, AOP (0) | 2023.06.29 |
---|---|
ResponseEntity, custom Exception, (0) | 2023.06.29 |
Logback, profile, Springutils, Stringutils, CollectionsUtils (0) | 2023.06.29 |
[프로젝트 구조] entity,dto,controller,service,repository (0) | 2023.06.29 |
@RequestParam (0) | 2023.06.29 |