스프링부트
-
Spring AOP: 프록시 기반 AOPSPRING/스프링프레임워크 핵심개념 2021. 5. 29. 15:46
스프링 AOP 특징 - 프록시 기반의 AOP 구현체 - 스프링 빈에만 AOP를 적용할 수 있음. - 모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IOC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적임. 프록시 패턴 Proxy 패턴은 위와 같이 Interface가 있고, Client는 Interface Type으로 Proxy 객체를 사용한다. Proxy객체는 또한 Real Subject(target) 객체를 참조하고 있다. 아래 코드는 Proxy 패턴의 예제이다. // Client 역할 @Component public class AppRunner implements ApplicationRunner { @Autowired EventService eve..
-
SPEL(스프링 Expresssion Language)SPRING/스프링프레임워크 핵심개념 2021. 5. 23. 22:44
스프링 EL - 객체 그래프를 조회하고 조작하는 기능을 제공 - 스프링 3.0 부터 지원 - Unified EL과 비슷하지만, 메소드 호출을 지원하며 문자열 템플릿 기능도 제공 SpEL 구성 ExpressionParser parser = new SpelExpressionParser() StandardEvaluationContext context = new Standard EvaluationContext (bean) Expression expression = parser.parseExpression(“SpEL 표현식”) String value = expression.getValue(context, String.class) 문법 - #("표헌식") - ${"프로퍼티"} - 표현식은 프로퍼티를 가질 ..
-
데이터 바인딩 추상화 : Converter와 FormatterSPRING/스프링프레임워크 핵심개념 2021. 5. 23. 18:03
스프링 3.0 이후부터는 Converter와 Formatter를 이용해서 데이터 바인딩을 할 수 있다. PropertyEditor의 단점 - Thread-safe하지 않음. - String-Object 변환만 가능하다. Converter - S타입을 T타입으로 변환할 수 있는 일반적인 변환기 (여러 Type 변환가능) - Thread-safe하기 때문에 Bean으로 등록하여 사용해도 됨. - ConverterRegistry에 등록하여 사용해야함. 일반적인 Spring에서는 아래와 같이 환결설정 파일(WebConfig)에 Converter를 등록하여 사용한다. 그러나 Spring Boot에서는 Converter를 bean으로 등록하여 사용할 수도 있다. @Configuration public class W..
-
데이터 바인딩 추상화: PropertyEditorSPRING/스프링프레임워크 핵심개념 2021. 5. 19. 20:24
Property의 값을 Target 객체 설정하는 기능을 데이터 바인딩이라고 한다. 사용자 관점에서 보자면 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환해 넣어주는 기능 EX:) 입력값은 String인데, 입력값을 int, long, Boolean, Date 등 또는 Event, Book 같은 도메인 타입으로 변환해서 넣음. PropertyEditor - 스프링 3.0 이전까지 DataBinder가 변환 작업 사용하던 인터페이스 - 쓰레드-세이프 하지 않음. (싱글톤 빈으로 등록해서 사용 X) - Object와 String 간의 변환만 가능하기 때문에 사용 범위가 제한적임. - PropertyEditor를 implements하여 직접 Editor를 구현할 수도 있지만, PropertyEdito..
-
Validation추상화SPRING/스프링프레임워크 핵심개념 2021. 5. 19. 15:20
스프링에서 애플리케이션에서 사용하는 객체들을 검증용 Interface를 제공한다. -> 모든 계층 (웹, 데이터, 서비스)에서 사용 가능 하다. -> Validation은 DataBinder에 들어가 바인딩 할 때 같이 사용되기도 한다. Validator Interface를 구현하는 Class는 두 가지 Method를 구현해서 사용한다. 1. supports : parameter로 받은 Instance의 클래스를 검증 2. validate : 실질적인 Validation이 이루어지는 Method import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.spring..
-
Resource 추상화SPRING/스프링프레임워크 핵심개념 2021. 5. 18. 22:11
Resource 추상화 - java.net.URL을 추상화한 것 - 스프링 내부에서 많이 사용 추상화를 한 이유 - 클래스패스 기준으로 리소스 읽어오는 기능 부재 - ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재 - 새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족 Resource 인터페이스를 구현한 구현체들의 목록 UrlResource URL을 기준으로 리소스를 읽어들임 지원하는 프로토콜 http, https, ftp, file, jar ClassPathResource 클래스패스를 기준으로 리소스를 읽어드림. classapth: FileSystemResource 파일시스템을 기준으로 리소스를 읽어드림. ServletC..
-
ResourceLoaderSPRING/스프링프레임워크 핵심개념 2021. 5. 17. 00:29
Resource를 로딩하는 인터페이스를 ApplicationContext가 상속받아 구현되었다. 그렇기 때문에 ResourceLoader 대신 ApplicationContext를 @autowired 하여 사용할 수도 있다. @Component public class AppRunner implements ApplicationRunner { @Autowired ResourceLoader resourceLoader; @Override public void run(ApplicationArguments args) throws Exception { Resource resource = resourceLoader.getResource("classpath:text.txt"); System.out.println(resou..
-
ApplicationEventPublisherSPRING/스프링프레임워크 핵심개념 2021. 5. 16. 23:31
- ApplicationPublisher는 이벤트 프로그래밍에 필요한 인터페이스를 제공한다. - ApplicationContext는 ApplicationEventPublisher를 상속한다. Event class // Spring 4.2 버전 이후 부터는 ApplicationEvent 상속 필요 X public class MyEvent extends ApplicationEvent { private int data; public MyEvent(Object source) { super(source); } public MyEvent(Object source, int data) { super(source); this.data = data; } public int getData() { return data; } ..