일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JDBC
- db
- 자바
- SpringBoot
- 스프링
- 인프런
- QueryDSL
- Android
- 백준
- 김영한
- Servlet
- http
- Greedy
- 스프링 핵심 원리
- 그리디
- transaction
- JPQL
- Thymeleaf
- kotlin
- 스프링 핵심 기능
- Proxy
- AOP
- jpa
- Exception
- java
- 알고리즘
- springdatajpa
- pointcut
- spring
- Spring Boot
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
예를 들어서 어떤 스프링 빈이 advisor1 , advisor2 가 제공하는 포인트컷의 조건을 모두 만족하면 프록시 자동 생성기는 프록시를 몇 개 생성할까? *************프록시 자동 생성기는 프록시를 하나만 생성한다. **************** 왜냐하면 프록시 팩토리가 생성하는 프록시는 내부에 여러 advisor 들을 포함할 수 있기 때문이다. 따라서 프록시를 여러 개 생성해서 비용을 낭비할 이유가없다. 1. 프록시 자동 생성기 상황 별 정리 advisor1 의 포인트컷만 만족 --> 프록시1개 생성, 프록시에 advisor1 만 포함 advisor1 , advisor2 의 포인트컷을 모두 만족 --> 프록시1개 생성, 프록시에 advisor1 , advisor2 모두 포함 advisor..
1. Application 로딩 로그 EnableWebMvcConfiguration.requestMappingHandlerAdapter() EnableWebMvcConfiguration.requestMappingHandlerAdapter() time=63ms 애플리케이션 서버를 실행해보면, 스프링이 초기화 되면서 기대하지 않은 이러한 로그들이 올라온다. 그 이유는 지금 사용한 포인트컷이 단순히 메서드 이름에 "request*", "order*", "save*" 만 포함되어 있으면 매칭 된다고 판단하기 때문이다. 결국 스프링이 내부에서 사용하는 빈에도 메서드 이름에 request 라는 단어만 들어가 있으면 프록시가 만들어지고 되고, 어드바이스도 적용되는 것이다. 결론적으로 패키지에 메서드 이름까지 함께 지..
1. build.gradle implementation 'org.springframework.boot:spring-boot-starter-aop' 이 라이브러리를 추가하면 aspectjweaver 라는 aspectJ 관련 라이브러리를 등록하고, 스프링 부트가 AOP 관련 클래스를 자동으로 스프링 빈에 등록한다. 스프링 부트가 없던 시절에는 @EnableAspectJAutoProxy 를 직접 사용해야 했는데, 이 부분을 스프링 부트가 자동으로 처리해준다. 스프링 부트가 활성화하는 빈은 AopAutoConfiguration 를 참고 2. 자동 프록시 생성기 - AutoProxyCreator 앞서 이야기한 스프링 부트 자동 설정으로 AnnotationAwareAspectJAutoProxyCreator 라는 빈..
문제1 - 너무 많은 설정 프록시를 직접 스프링 빈으로 등록하는 ProxyFactoryConfigV1 , ProxyFactoryConfigV2 와 같은 설정 파일은 프록시 관련 설정이 지나치게 많다는 문제가 있다. 예를 들어서 애플리케이션에 스프링 빈이 100개가 있다면 여기에 프록시를 통해 부가 기능을 적용하려면 100개의 프록시 설정 코드가 들어가야 한다. 무수히 많은 설정 파일 때문에 설정 지옥을 경험하게 될 것이다. 스프링 빈을 편리하게 등록하려고 컴포넌트 스캔까지 사용하는데, 이렇게 직접 등록하는 것도 모자라서, 프록시를 적용하는 코드까지 빈 생성 코드에 넣어야 했다. 문제2 - 컴포넌트 스캔 애플리케이션 V3처럼 컴포넌트 스캔을 사용하는 경우 지금까지 학습한 방법으로는 프록시 적용이 불가능했다..
빈 후처리기를 사용해서 실제 객체 대신 프록시를 스프링 빈으로 등록해보자. 이렇게 하면 수동으로 등록하는 빈은 물론이고, 컴포넌트 스캔을 사용하는 빈까지 모두 프록시를 적용할 수 있다. 더 나아가서 설정 파일에 있는 수 많은 프록시 생성 코드도 한번에 제거할 수 있다. 1. PackageLogTracePostProcessor @Slf4j public class PackageLogTracePostProcessor implements BeanPostProcessor { //특정 패키지 하위의 빈이 대상 private final String basePackage; private final Advisor advisor; public PackageLogTracePostProcessor(String basePack..
1. 스프링 빈 등록과정 - 바꿔치기 객체를 바꿔치기 한다며 빈 이름은 변경되지 않고 객체만 변경된다. 2. BeanPostProcessor Interface - 스프링 제공 public interface BeanPostProcessor { Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException } 빈 후처리기를 사용하려면 BeanPostProcessor 인터페이스를 구현하고, 스프링 빈으로 등록하면 된다. postProcessBeforeI..
1. 일반적인 스프링 빈 등록 public class BasicTest { @Test void basicConfig (){ //스프링 컨테이너 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BasicConfig.class); //A는 빈으로 등록됨. A a = applicationContext.getBean("beanA", A.class); a.helloA(); //B는 스프링 빈으로 등록되지 않음. Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> applicationContext.getBean(B.class)); } @Slf4j @Conf..
1. 일반적인 스프링 빈 등록 @Bean 이나 컴포넌트 스캔으로 스프링 빈을 등록하면, 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그리고 이후에는 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면 된다. 2. BeanPostProcessor 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶다면 빈 후처리기를 사용하면 된다. 빈 포스트 프로세서( BeanPostProcessor )는 번역하면 빈 후처리기인데, 이름 그대로 빈을 생성한 후에 무언가를 처리하는 용도로 사용한다. 빈 후처리기 기능 객체를 조작할 수도 있고, 완전히 다른 객체로 바꿔치기 하는 것도 가능하다. 3. 빈 후처리기 과정 생성: 스프링 빈 대상이 되는..