1. Spring & 개발환경
1) Framework
- 프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임.
※ 라이브러리는 개발자가 주도적으로 코드를 작성하며, 그 과정을 보조하는 역할 (부품)
※ 프레임워크는 어플리케이션의 구조 또는 틀을 제공하며 개발을 위한 기본적인 형태와 필수 요소를 포함 (자동차)
2) Spring
- 엔터프라이즈 급 어플리케이션을 만들기 위한 모든 기능을 종합적으로 제공하는 경량화 된 솔루션이다.
- 즉, 개발자가 복잡하고 실수하기 쉬운 Low Level에 신경 쓰지 않고 Business Logic 개발에 전념할 수 있도록 해준다.
- 경량 컨테이너
- DI(의존성 주입) 지원
- AOP(관점 지향 프로그래밍) 지원
- POJO(Plain Old Java Object) 지원
- IOC(제어의 역전) 지원
2. IOC & Container
1) IOC(Inversion of Control, 제어의 역전)
- 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미.
2) Container
- 객체의 생성, 사용, 소멸에 해당하는 라이프사이클을 담당
- 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있어 IOC라고 부름.
- 스프링 컨테이너를 IOC 컨테이너라고 부르기도 함
3) Spring DI Container
- .Spring DI Container가 관리하는 객체를 Bean이라고 한다.
- 이 빈들의 생명주기를 관리하는 의미로 빈 팩토리라고 한다.
- 빈 팩토리에 여러 가지 컨테이너 기능을 추가하여 ApplicationContext(더 자주 사용)라고 한다.
4) DI(Dependency Injection, 의존성 주입)
- 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식
3. DI
1) 빈 생성범위
- 스프링 빈은 기본적으로 싱글톤으로 만들어짐 (default)
- 항상 새로운 인스턴스를 반환하게 만들고 싶을 경우 scope를 prototype으로 설정해야 함.
2) 스프링 빈 설정
- xml 문서 이용
- annotation : 빈으로 사용될 클래스에 @autowired를 부여해 주면 자동으로 빈 등록 가능, 반드시 component-scan 설정
- 자바 Configuration File : @Configuration, @ComponentScan 사용
※ Main 변경 : AnnotationConfigApplicationContext로 변경
3) Stereotype annotation
- 빈 자동등록에 사용할 수 있는 annotation
- @Repository, @Service, @Controller, @Component
4. DI (XML)
1) 기본 설정(빈 객체 생성 및 주입)
- 주입 할 객체를 설정 파일에 설정
- name : 주입 받을 곳에서 호출 할 이름 설정
- id : 주입 받을 곳에서 호출 할 이름 설정 (유일 값)
- class : 주입 할 객체의 클래스
- factory-method : Singleton 패턴으로 작성된 객체의 factory 메서드 호출
- 설정 파일에 설정한 bean을 Container가 제공하는 주입기 역할의 api를 통해 주입 받는다.
2) Constructor injection
- 객체 또는 값을 생성자를 통해 주입 받는다.
- <constructor-arg ref=" "> : bean 객체 또는 값을 생성자를 통해 주입하도록 설정.
3) Property injection
- property를 통해 객체 또는 값을 주입 받는다. - setter method
- setter를 통해서는 하나의 값만 받을 수 있다.
- name에는 get을 빼고 소문자로 시작할 수 있다. (el과 비슷하다)
- value 말고 다른 빈 객체를 사용할 경우 ref를 사용 할 수 있다.
5. DI(Annotation)
1) @Autowired : 의존성을 주입하는 어노테이션, private final과 생성자 주입을 주로 사용
2) @Controller, @Service, @Repository, @Component : 빈 객체로 만들어라.
3) 코드 예제
1. xml에 작성
<context:component-scan base-package="com.ssafy.annotation"></context:component-scan>
2. 빈 등록
@Service
public class BoardServiceImpl implements BoardService{
private final BoardDao boardDao;
@Autowired
public BoardServiceImpl(BoardDao boardDao) {
this.boardDao = boardDao;
}
@Override
public void list() {
boardDao.selectBoard();
}
}
3. 의존성 주입
@Controller
public class BoardController {
private final BoardService boardService;
@Autowired // 생성자 주입 : 생성자가 하나밖에 없는 경우 @Autowired를 생략해도 자동 주입
public BoardController(BoardService boardService) {
this.boardService = boardService;
}
public void list() {
boardService.list();
}
}
※ 의존성 주입 참고 : https://ch4njun.tistory.com/219
[Spring Boot] Bean과 의존성 주입(Dependency Injection)
Bean에 대해서 설명하기에 앞서 Spring에서 등장하는 IoC 컨테이너에 대해서 이야기 해본다. IoC는 Inversion Of Control Container의 약자로 기존의 모든 제어를 클라이언트의 코드가 가지도록 구현하던 것
ch4njun.tistory.com
※ 스프링 Annotation 참고 : https://velog.io/@rara_kim/Spring-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98Annotation
[Spring] 어노테이션(Annotation)
사전적 의미로는 주석이라는 뜻이지만, 자바에서 Annotaion(@)은 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술이다.프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공하고, 코
velog.io
'Web > Spring' 카테고리의 다른 글
MyBatis-Spring (0) | 2024.04.22 |
---|---|
MyBatis (0) | 2024.04.19 |
Interceptor, Filter, AOP (0) | 2024.04.18 |
SpringMVC (0) | 2024.04.17 |
AOP(관점 지향 프로그래밍) (0) | 2024.04.16 |