1. IoC 컨테이너와 빈 듣고 정리

1)Inversion of Control : 의존 관계 주입(Dependency Injection)이라고 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말 함

 

스프링 IoC 컨테이너

-       BeanFactory

-       애플리케이션 컴포넌트의 중앙 저장소

 설정 소스로부터 빈 정의를 읽어들이고, 빈을 구성하고 제공

-       스프링 IoC컨테이너가 관리 하는 객체

-       장점

  1. 의존성 관리
  2. 스코프 : 싱글톤 (Default) , 프로토타입

             싱글톤 (주입 받아서 사용하면 항상 같은 객체를 나타내기 때문에 메모리와 비용을 절약할 수 있음)

      3.라이프사이클 인터페이스

@PostConstruct

           Service가 만들어지고 원하는 작업을 할 수 있음

           이외에도 다양한 라이프사이클 관리가 가능하다.

>     의존성을 가지면 단위 테스트를 하기 힘들다

@Mock 가짜객체를 만들어서 의존성 주입을 해줄 수 있다.

 

2) ApplicationContext

다른 방법 실습 - > WebMvc 프로젝트해서 했던 것 처럼 class에서 관리 가능

 

3) Autowired

required = true , 같은 타입의 빈이 여러 개 일 때  @Primary 등도 이용 가능

 

4) Environment

프로파일 빈들의 그룹

테스트 환경에서는 A라는 빈을 사용하고, 배포 환경에서는 B라는 빈을 쓰고 싶다. @Configuration @Profile("test") 프로파일을 설정함

 

5) MessageSource 국제화(i18n) 기능을 제공하는 인터페이스 , ApplicationEventPublisher 이벤트를 다룸 (Order, Async 등), ResourceLoader

 

6) Resource 추상화

특징

Java.net.URL을 추상화 한 것

스프링 내부에서 많이 사용하는 인터페이스 

추상화 한 이유

클래스패스 기준으로 리소스 읽어오는 기능 부재

ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재

새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족

 

7) Validation 추상화

애플리케이션에서 사용하는 객체 검증용 인터페이스

특징 어떠한 계층과도 관계가 없다 => 모든 계층에서 사용해도 좋다.

@NotEmpty, @limit, @Email 등에 annotaion이 존재

 

8) 데이터 바인딩 추상화: PropertyEditor

org.springframework.validation.DataBinder

기술적인 관점: 프로퍼티 값을 타겟 객체에 설정하는 기능

DataBinder가 변환이전 PropertyEditorSupport를 extends해서 구현할 수 있었음

PropertyEditorySupport는 쓰레드-세이프 하지 않다 bean으로 등록x

-> InitBinder를 등록하는 방법이 있다.

Public void init(WebDataBinder webDataBinder)

 

9)데이터 바인딩 추상화 Converter와 Formatter

Converter

String 타입을 T타입으로 변환할 수 있는 매우 일반적인 변환기

상태 정보 없음 == stateless == 쓰레드세이프

ConvertRegistry에 등록해서 사용

 

Formatter PropertyEditor 대체제

Object와 String간의 변환을 담당 문자열을 Locale에 따라 다국화하는 기능도 제공

 

10) SpEL (스프링 Expression Language)

스프링 EL이란?

객체 그래프를 조회하고 조작하는 기능을 제공

Unified EL과 비슷하지만 메소드 호출을 지원하며 문자열 템플릿 기능도 제공

SpEL구성

ExpressionParser parser = new SpelExpressionParser()

@Value( “#{1 + 1}“)

String Boolean 등도 가능

@Value(“${my.value}”) 프로퍼티

표현식은 프로퍼티를 가질 수 있지만 반대는 안 됨

#{${my.data} + 1}

 

11)스프링 AOP : 개념 소개

Aspect-oriented Programming 은 OOP를 보완하는 수단

흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법

 

AOP 주요 개념

Aspect는 묶은 것 모듈 advice해야할 일

Join point는 합류 지점 예: A라는 메소드 B라는 것을 호출할때

pointcut은 어디에 적용해야하는지 들고 있다.

Target classaA, B, C 적용되는 대상

AOP구현체

자바 – AspectJ, 스프링 AOP

AOP적용 방법

컴파일, 로드 타입, 

런타임이 가장 현실적이다.

 

12) 스프링 AOP: 프록시 기반 AOP

스프링 AOP특징

프록시 기반의 AOP 구현체

스프링 빈에만 AOP를 적용할 수 있다.

모든 AOP기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적

예) 기존 코드를 건드리지 않고 성능을 측정하는 경우

스프링 IoC: 기존 빈을 대체하는 동적 프록시 빈을 만들어 등록 시켜준다.

○ 클라이언트 코드 변경 없음.

○ AbstractAutoProxyCreator implements BeanPostProcessor

 

13) 스프링 AOP: @AOP

어노테이션 기반의 스프링 @AOP

 

14)Null-safety

스프링 프레임워크 5에 추가된 Null 관련 어노테이션

 

@NonNull

@Nullable

@NonNullApi

@NonNullFields

 

+ Recent posts