일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 아두이노 개발
- 아두이노라이브러리
- 50만호공급
- DataBinding
- SpringBoot
- onnxruntime
- WPF
- ObjectNode
- 구체화하기
- C#
- 웹개발
- Spring 웹
- http
- V2X
- ListView
- Spring 웹개발
- ESP32
- 리츠주택
- 대방동군부지
- C-ITS
- C-V2X
- Ai
- ESP-DL
- 공릉아파트부지
- 청년원가주택
- spring
- wave
- 아두이노
- 삼성의료원부지
- java programming
- Today
- Total
John's 개발자의 관심노트
Spring 삼각형 - "IoC / DI" 개념을 예제로 알아보기 본문
Spring 삼각형에는 "AOP", "IoC / DI", "PSA" 개념을 가지고 있다 라고 설명을 드렸습니다. 이번 글에서는 예제 코드를 통해서 "IoC / DI" 에 대해 조금 더 자세하게 알아보겠습니다.
Spring 에서는 IoC 개념을 가지고 있어, 객체의 생성/소멸 등 라이프 싸이클을 개발자가 아닌 프레임워크에서 직접 제어를 한다고 설명을 드렸습니다. 또한, DI 개념으로 Spring 에서 관리하는 객체, 즉 Bean 들의 관계를 설정 및 관리하고 각 Bean 들을 필요에 따라 자동으로 주입시켜줍니다.
그렇다면 Spring Container 에는 정말로 Bean 이라고 불리는 객체들이 생성이 되어 있을까요?
다음 예제 코드를 통해서 Bean 이 생성 되어있는지, 생성이 되어 있다면 가져와서 사용을 해보도록 하겠습니다.
Bean 들이 모여있는 공간인 Bean Factory 에 접근하기 위해서는 "ApplicationContext" 객체가 필요하며, 해당 객체를 통해서 원하는 Bean 을 전달받아 사용할 수 있습니다.
❔ ApplicationContext
스프링 어플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진
1. 프로젝트 생성
Java 11 버전을 활용했고, Dependency 는 "Spring WEB" 한 개만 적용하였습니다.
2. "ApplicationContext" 를 받아오기 위한 Class 생성
🔗 위치 : "com.example.springioc"
💻 line : 9
ApplicationContextAware 를 상속받으면, "setApplicationContext" 메소드를 구현해야하는데 이때 "applicationContext" 를 전달받을 수 있습니다.
💻 line : 10
전달 받은 ApplicationContext 를 담아둘 변수를 선언했습니다.
💻 line : 17
외부에서 ApplicationContext 를 전달받을 수 있도록 메소드를 구현했습니다.
3. Bean 에 등록할 클래스 생성
IEncoder 인터페이스를 만들고, 이를 상속받아 Bean Factory 를 테스트할 클래스 2종류를 만들어보도록 하겠습니다.
특정 문자열을 Encode 하는 예제로, "Base64Encoder" 와 "URL Encoder" 2종류로 구성했습니다.
🔗 위치 : "com.example.springioc.sample"
단순히 기존 Java Library 내에 있는 Encoder 2종류를 받아와 전달받은 String 데이터를 Encode 하고 반환해주는 함수입니다.
💻 line : 9 ("Base64Encoder")
💻 line : 8 ("UrlEncoder)
위에서 공통적으로 보아야할 부분은 "@Component" 부분입니다.
@Component 어노테이션을 붙여줌으로서, 해당 클래스를 BeanFactory 에 등록하겠다라는 의미를 가집니다.
4. Bean 을 얻어와 활용하기
위 클래스들을 모두 생성하고나면, 다음과 같은 디렉토리 구조를 가질 수 있습니다.
이제 ApplicationContext 를 얻어와 Bean 을 전달받아 사용하는 예제 코드를 작성해보겠습니다.
💻 line : 16
Encoder 를 통해 테스트할 변수를 생성합니다.
💻 line : 17
ApplicationContext 를 담을 변수입니다.
💻 line : 18
Bean 을 담을 변수입니다.
💻 line : 23
Application Context 를 받아옵니다.
💻 line : 26
Bean 에 등록된 객체들 중, "Base64Encoder" 클래스와 관련한 Bean 을 가져옵니다.
💻 line : 30
Bean 에 등록된 객체들 중, "UrlEncoder" 클래스와 관련한 Bean 을 가져옵니다.
각각의 Bean 을 가져와 Encoding 을 하고 이를 출력하는 예제 코드입니다. 다음은 결과화면 입니다.
💻 출력 결과물
Base 64 Encode : aHR0cDovL3d3dy5uYXZlci5jb20=
URL Encode : http%3A%2F%2Fwww.naver.com
'[개발] > Spring WEB' 카테고리의 다른 글
Spring 롬복(Lombok) 사용해보기 (0) | 2022.11.10 |
---|---|
Spring 삼각형 - "AOP" 개념을 예제로 알아보기 (0) | 2022.11.09 |
Springboot REST API 구현하는 방법, Put Method 구현 (@PutMapping, @RestController) (1) | 2022.10.20 |
Springboot REST API 구현하는 방법, POST Method 구현 (@PostMapping, @RestController) (0) | 2022.10.19 |
HTTP Method 구현하기, "GET Method" with SpringBoot (0) | 2022.10.17 |