본문 바로가기
Web/Spring

Spring Architecture DI

by 당진개발자 2024. 4. 15.

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