본문 바로가기

ALL

(131)
1-3) 스프링 @ComponentScan의 다양한 설정들 : basePackages, useDefaultFilters, includeFilters, excludeFilters, lazyInit - @ComponentScan 어노테이션 스프링으로 서비스를 개발해본 적이 있다면, @ComponentScan 어노테이션이 굉장히 익숙할 것이다. ApplicationContext 설정 클래스에 @ComponentScan("패키지 경로")을 적어두면 해당 패키지에 있는 @Controller, @Service, @Repogitory, @Component 객체들이 DI 컨테이너에 등록된다. package com.package1.component; @Component class Component1{ ... public Component1(){ System.out.println("Component1 Constructor"); } ... } @Configuration @ComponentScan("com.packa..
1-2) 스프링 DI 스코프 관리 : @Bean, @Component, @Scope, @Lookup, proxyMode - DI 컨테이너의 컴포넌트 스코프(생명주기) 관리 DI 컨테이너는 등록된 객체들에 의존성을 주입하는 일 뿐 아니라, 그들의 스코프(생명주기)를 관리하는 일도 수행한다. 기본적으로 컨테이너에 등록되면 싱글톤(Singleton) 스코프를 적용한다. 싱글톤 스코프에서는 프로그램 시작부터 끝까지, 하나의 객체만을 사용한다. @Component class SingletonBean{ public SingletonBean(){ System.out.println("SingletonBean Constructor"); } ... } ... ApplicationContext context = new AnnotationConfigApplicationContext(AppContext.class); SingletonBean s..
1-1) 스프링 의존성 주입(DI), 제어의 역전(IoC) : @Bean, @Component, @Autowired, @Primary, @Qualifier - 의존성 주입(Dependency Injection, DI), 제어의 역전(Inversion of Control, IoC) 이란 큰 규모의 프로젝트를 다수와 협업하여 개발하다보면 여러 문제 상황에 직면하게 된다. 규모가 커짐에 따라, 컴포넌트의 수가 많아지고, 컴포넌트들 간의 결합 역시 복잡해지게 된다. 예를 들어서 다음과 같은 코드를 보자. class UserService { private Encoder encoder; ... public UserService(Encoder encoder){ this.encoder = encoder; } ... } ... Encoder encoder = new MyEncoder(); UserService dao = new UserService(encoder); .....