스프링 AOP: @AOP Spring AOP 구성 SimpleEventService(Real Subject)가 Bean으로 등록된다 BeanPostProcessor(Bean을 가공할 수 있는 LifeCycle 인터페이스)를 구현한 AbstractAutoProxyCreator로 Real Subject Bean을 감싸는 Proxy Bean을 만든다. 해당 Proxy Bean을 Real Subject Bean 대신에 등록을 해준다. 즉, Spring Boot로 인해 Proxy Bean을 동적으로 만들어주고, 구현한 Aspect가 Proxy 역할을 하는 것이다. Aspect내에서는 해야할 일(Advice)들을 개발자 재량에 따라 구현하면 되는 것이다. 그럼 이제 Spring Boot에서 제공하는 Proxy 기반..
스프링 AOP: 프록시 기반 AOP 스프링 AOP 특징 프록시 기반의 AOP 구현체이다. 스프링 Bean에만 AOP를 적용할 수 있다. 모든 AOP의 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 엔터프라이즈 애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적이다. 프록시 패턴 Real Subject : 원래 해야할 일 Proxy : 원래 해야할 일을 참조 즉, Subject의 타입은 Proxy를 사용하고 Proxy는 Real Subject를 감싸서 실제 클라이언트의 요청을 처리하게 된다. 이렇게 하는 이유는? 접근 제어 혹은 유연한 부가 기능 추가 때문이다. 예제를 통해 살펴보자 EventService : Subject SimpleEventService : Real Subject..
스프링 AOP: 개념 소개 스프링 AOP란 AOP란, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 OOP를 더 잘하게끔 도와주는 것이다. 그림을 통해 살펴보자 그려진 선들은 각각의 Concems을 칭한다. Concems란, 비슷한 코드들을 말하는 데, 예를 들면 트랜잭션 처리나 로깅 처리 하는 것들을 일컬어 말하는 것이다. 비슷한 코드 즉, Concems들이 각각 클래스에 배치 되는데 이것들이 만약 수정이 필요하게 되면 우리는 각각의 클래스에 소스코드를 모두 수정해야하는 비효율적인 작업을 해야한다. 결과적으로 유지보수하는데 쉽지가 않다. 그래서 AOP는 이런 문제를 Aspect를 활용해서 해결한다. 즉, 흩어져있는 Concems를 한곳에 모으는 것이다. AOP가 Aspect를 활용 각 Con..
Validation 추상화 애플리케이션에서 사용하는 객체들을 검증하는 인터페이스다. Bean Validation 1.0과 1.1을 지원한다. Validator 인터페이스 사용하기 두 가지 메소드를 구현해야한다. boolean supports(class clazz) : 어떤 타입의 객체를 검증할 때 사용할 것인지 결정한다. void validate(Object obj, Error e) : 실제 검증 로직을 이 안에서 구현한다. 구현할 때 ValidationUtils를 사용하면 편리하다. 소스를 통해 validator를 만들어 보자 //Event public class Event { Integer id; String title; public Integer getId() { return id; } public..
Resource 추상화 java.net.URL을 추상화 한 것이다. 추상화한 이유 java.net.URL은 classpath 기준으로 리소스를 읽어오는 기능이 부재되어 있다. ServletContext를 기준으로 상대 경로를 읽어오는 기능이 부재되어 있다. URL은 기본적으로 프로토콜 http, https, ftp, file, jar를 지원해준다. 이런 부분들을 통합해서 하나의 추상화로 만든것이다. 구현체 ClassPathResource : classpath 접두어를 사용하면 해당 classpath 기준으로 리소스를 찾는다. FileSystemResource : filesystem 기준으로 리소스를 찾는다. ServletContextResource : 사실상 가장 많이 사용. 웹 애플리케이션 루트에서 상..
ApplicationContext extends ResourceLoader ApplicationContext가 상속받는 것중 ResourceLoader에 대해 살펴보자 리소스가 읽어오는 기능을 제공하는 인터페이스다. 리소스를 읽어오는 방법 파일 시스템 읽어오기 classpath에서 읽어오기 target/classes가 root가 되고 이 밑으로 찾게 리소스를 찾게된다. @Component public class AppRunner implements ApplicationRunner { @Autowired ResourceLoader resourceLoader; @Override public void run(ApplicationArguments args) throws Exception { Resource re..
ApplicationContext extends ApplicationEventPublisher ApplicationContext가 상속받는 것중 ApplicationEventPublisher에 대해 살펴보자 Event 만들어보기 스프링 4.2 전에는 ApplicationEvent를 상속 받은 후 Event를 만들어야 했으나, 그 이후 부터는 해당 클래스를 상속받지 않아도 Event로 사용할 수 있다. public class MyEvent { private int data; private Object source; public MyEvent(Object source, int data) { this.source = source; this.data = data; } public Object getSource(..
ApplicationContext extends MessageSource ApplicationContext가 상속받는 것중 MessageSource에 대해서 살펴보자 MessageSource는 메시지 설정 파일을 모아놓고 각 국가에 맞는 메시지를 제공할 수 있다. Spring Boot에서는 ResourceBundleMessageSource가 Bean으로 등록되어 있어 .properties만 설정되어 있으면 메시지를 가져와 사용할 수 있다. messages.properties message_ko_KR.properties message_en_US.properties 등등.. //messages.properties greeting=Hello, my name is {0} //message_ko_KR.proper..
- Total
- Today
- Yesterday
- 스프링부트
- mustache
- effectivejava
- 인프런
- springboot
- JPA
- 점층적 생성 패턴
- 빌더 패턴
- java
- 자바8
- @Lazy
- jdk버전
- java8
- 연관관계
- Effective Java
- 팩토리 메소드 패턴
- package-private
- 정적팩터리메서드
- 빈 순환 참조
- 이펙티브자바
- 김영한
- try with resources
- try catch finally
- 복사 팩토리
- junit
- 생성자
- 이펙티브 자바
- ifPresent
- Spring
- flatMap
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |