1. IoC 컨테이너와 빈 듣고 정리
1)Inversion of Control : 의존 관계 주입(Dependency Injection)이라고 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말 함
스프링 IoC 컨테이너
- BeanFactory
- 애플리케이션 컴포넌트의 중앙 저장소
빈 설정 소스로부터 빈 정의를 읽어들이고, 빈을 구성하고 제공
- 스프링 IoC컨테이너가 관리 하는 객체
- 장점
- 의존성 관리
- 스코프 : 싱글톤 (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
'개발자 > v0' 카테고리의 다른 글
Apache HTTP서버와 Tomcat 서버의 연동 - ajp connector node not found (local DNS) 이용시 (0) | 2020.12.30 |
---|---|
[ERROR] getWinUtilsPath (0) | 2020.12.30 |
git 정리 2 (0) | 2020.12.29 |
웹 프로그래밍 하면서 참고할 사항들 (0) | 2020.12.10 |
git 사용법 (gitlab, github) (0) | 2020.11.07 |