728x90
반응형
728x90
반응형
Bean Scope 스프링은 빈이라는 개념으로 객체를 만들고 관리해준다. 스프링 빈은 기본적으로 싱글톤 스코프로 생성되기에, 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지된다고 알고 있다. 이렇게, 스프링 빈이 존재할 수 있는 범위를 빈 스코프라고 한다. Bean Scope종류 singleton : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. prototype : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더이상 관리하지 않는 짧은 범위의 스코프이다. request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프이다. applic..
@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 ..
제어의 역전 (IoC - Inversion of Control) 기존 프로그램은 클라이언트 구현 객체(OrderServiceImpl)가 스스로 필요한 서버 구현 객체를 생성하고, 연결, 실행했다. 하지만 AppConfig 등장 이후에 구현 객체(OrderServiceImpl)는 자신의 로직을 실행하는 역할만 담당한다. 구현 객체를 생성하고, 연결하는 제어 흐름은 AppConfig가 가져단다. 이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전이라 한다. 프레임워크 vs 라이브러리 프레임워크 : 내가 작성한 코드를 제어하고, 대신 실행 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당 의존 관계 주입 (DI - Dependency Injection) Ord..
EJB - Enterprise Java Beans 과거 자바 진영 표준 기술 Spring, ORM 등을 가지고 있는 종합 선물 세트. But 높은 비용, 어렵고, 느리고, 복잡하다. 추가로 EJB에 너무 의존적..... 그래서 POJO 등장. 스프링 스프링은 자바 언어 기반의 프레임워크 자바 언어의 가장 큰 특징 - 객체 지향 언어 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 spring.io/projects Spring | Projects Spring Framework Provides core support for dependency injection, transaction management, web ap..