728x90
반응형
728x90
반응형
Spring in Action (5판) 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발 Walls, Craig 지음 제어펍 출판사 2020.05.14 스프링 인 액션 개인 스터디 내용을 정리하자. Spring AOP Spring AOP는 프록시 패턴으로 AOP 기능을 한다. 프록시 패턴을 사용하면 기능 추가 시 기존 코드를 변경하지 않는 장점이 있다. 어떤 클래스가 Spring AOP의 대상이라면 기존 클래스의 빈이 생성될 때 Spring AOP가 프록시를 자동으로 만들고 원본 클래스 대신 프록시를 빈으로 등록한다. 그리고 원본 클래스가 사용되는 지점에서 프록시를 대신 사용한다. Spring AOP에 대한 자세한 내용을 아래를 참조하자. hoooon-s.tistory.com/54?cate..
Spring in Action (5판) 스프링 5의 강력한 기능과 생산성을 활용한 웹 애플리케이션 개발 Walls, Craig 지음 제어펍 출판사 2020.05.14 스프링 인 액션 개인 스터디 내용을 정리하자. AOP Aspect Oriented Programming 관점 지향 프로그래밍 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 모듈화 하는 것이다. OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화하여 비즈니스 로직을 헤치지 않고 재사용하는 기법이다. 위와 같이 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하는 것이 AOP의 목적이다. Aspect 애플리케이션 내 흩어져 있는 코드/기능, 비즈니스 로직은 아니다. 여러 객체에 공통적으로 ..
스프링이란? 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크이다. Config 최근에는 XML 파일 대신 자바 기반의 Configuration을 사용하는 추세이다. @Configuration : 각 빈이 스프링 애플리케이션 컨텍스트에 제공하는 구성 클래스라는 것을 스프링에게 알려주는 역할 @Bean : 각 메서드에서 반환되는 객체가 애플리케이션 컨텍스트의 빈으로 추가된다. 각 Bean의 ID = 해당 Bean을 반환하는 메서드의 이름 Bean 애플리케이션의 핵심을 이루는 객체이며, Spring IoC Container에 의해 인스턴스화, 관리, 생성된다. Spring Bean Life Cycle Bean Scope singleton 기본적으로 모든 Bean은 Singleton Spring IoC Co..
@ComponentScan @Configuration @ComponentScan( basePackages = "hello.core", excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } 컴포넌트 스캔은 @Component 어노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록해준다. @Configuration, @Controller, @Service, @Repository 등이 대상이 되는 이유는 각 어노테이션 내부로 들어가면 @Component가 선언되어 있기 때문이다. basePackages 속성으로 탐색할 패키지 시..
스프링이 없는 순수한 DI 컨테이너 @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainter() { AppConfig appConfig = new AppConfig(); // 호출할 때마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); // 참조값이 다르다. JVM 메모리에 새로운 객체가 계속 생성되어 저장된다. assertThat(memberService1).isNotSameAs(memberService2); } 호출이 올 때마다 객체를 새로 생성하고, 이후 소멸하기에 메모리 낭비..
스프링 컨테이너 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = applicationContext.getBean("memberService", MemberService.class); ApplicationContext를 스프링 컨테이너라 한다. 기존에는 AppConfig를 통해 직접 객체를 생성하고 DI 했지만, 이젠 스프링 컨테이너를 사용한다. 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 한다. (여기서는 AppConfig.class) @Configuration public class AppConfig { @Bean ..