Di 8

학습 // Spring // DI // Test

업데이트 :: 2018.08.22 스프링 테스트DI 컨테이너와 빈의 테스트빈의 단위 테스트의존컴포넌트의 모의화DI 컨테이너에서의 빈의 통합테스트스프링 TestContext 프레임워크DI 컨테이너 설정DI 컨테이너의 라이프사이클 제어프로파일 지정테스트용 프로퍼티 값 지정스프링 테스트기능Junit, TestNG 라는 테스팅 프레임워크 사용해서 스프링의 DI 컨테이너 동작트랜젹션을 테스트 상황에 맞게 제어애플리케이션 서버를 사용치 않고 스프링 MVC 동작을 재현테스트 데이터를 적재하기 위해 SQL을 실행RestTemplate을 이용해서 HTTP 요청에 대한 임의의 응답을 보내는 기능DI 컨테이너와 빈의 테스트다음과 같은 애너테이션을 테스트 하는 모듈@Controller@Service@Repository@Com..

Spring/DI & AOP 2018.08.22

학습 // Spring // DI // 프로파일(Profile)

업데이트 :: 2018.08.07 프로파일 (profile)클래스레벨메서드레벨프로파일 선택프로파일 (profile)설정 파일을 특정 환경이나 목적에 맞게 선택적으로 사용할 수 있도록 그룹화클래스레벨자바기반 (@Profile 사용)@Configuration @Profile("dev") public class DevConfig { } @Configuration @Profile("test") public class TestConfig { } @Configuration @Profile("prod") public class ProductionConfig { } XML 기반 (profile="") 애너테이션 기반@Component @Profile("dev") public class DummyUserRepositor..

Spring/DI & AOP 2018.08.07

학습 // Spring // DI // Bean 설정분할 (import)

업데이트 :: 2018.08.07 빈 설정분할자바기반 설정분할Xml기반 설정분할빈 설정분할DI 컨테이너에서 관리하는 빈이 많아질수록 관리가 어려움빈 설정범위를 명확히 하고 가독성을 높이기 위해 목적에 맞게 분할하는 것이 좋음자바기반 설정분할@Import를 사용해서 분할된 설정을 병합@Configuration @Import({DomainConfig.class, InfrastructureConfig.class}) public class AppConfig { // DomainConfig.class와 InfrastructureConfig.class에 정의한 빈을 주입할 수 있음 } 분할된 클래스 (1)@Configuration public class DomainConfig { @Bean UserService u..

Spring/DI & AOP 2018.08.07

학습 // Spring // DI // 빈 생명주기 ( Bean Lifecycle )

업데이트 :: 2018.08.07 빈의 생명주기빈 초기화단계빈 설정정보 읽기 및 보완빈 생성 전후처리빈 생성 초기화처리빈 사용단계빈 종료단계빈 파괴 전처리DI 컨테이너 종료빈의 생명주기빈 초기화 단계 (initialization)빈 사용 단계 (activation)빈 종료 단계 (destruction)빈 초기화단계빈을 설정하는 과정빈을 인스턴스화 하는 과정빈을 생성한 다음 후처리 하는 과정빈 설정정보 읽기 및 보완public interface BeanFactoryPostProcessor { void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory); } BeanFactoryPostProcessor를 직접 구현해서 빈으로 정의하면 자신..

Spring/DI & AOP 2018.08.07

학습 // Spring // DI // ComponentScan & Filter

업데이트 :: 2018.08.07 컴포넌트 스캔기본설정 컴포넌트 스캔필터적용 컴포넌트스캔할당가능한 타입활용 필터정규표현식 패턴으로 필터기본대상이나 특정대상을 빼고 필터컴포넌트 스캔클래스로더를 스캔하면서 특정 클래스를 찾아 DI 컨테이너에 등록하는 방법기본설정 컴포넌트 스캔@Component아래 세 경우에 해당하지 않는 컴포넌트 ( 유틸리티, 기타 지원 클래스 )에 붙는 애너테이션@ControllerMVC패턴에서 C, 컨트롤러 역할을 하는 컴포넌트에 붙이는 애너테이션클라이언트에서 오는 요청을 받고, 비즈니스 로직의 처리 결과를 응답으로 돌려보내는 기능실제 비즈니스 로직은 @Service 컴포넌트가 처리하도록 위임@Service비즈니스 로직(service)을 담당하는 컴포넌트에 붙이는 애너테이션컨트롤러에서 ..

Spring/DI & AOP 2018.08.07

학습 // Spring // DI // 오토와이어링 ( Autowiring )

업데이트 :: 2018.08.07 오토와이어링타입으로 오토와이어링이름으로 오토와이어링컬렉션이나 맵으로 오토와이어링오토와이어링자바기반 설저방식이나 XML기반 설정방식에서 명시적으로 Bean을 선언하는 것과 달리 DI 컨테이너에 빈을 자동으로 주입하는 방식타입으로 오토와이어링@Autowired 애너테이션은 타입으로 오토와이어링 하는 방식의존성주입이 반드시 성공한다는 가정DI 컨테이너 안에서 찾지 못하면 'NoSuchBeanDefinitionException' 에외발생'required' 속성을 false 처리하면 필수조건이 완화 ( java.util.Optional 속성도 가능 )required 사용@Component public class UserServiceImpl implements UserService..

Spring/DI & AOP 2018.08.07

학습 // Spring // DI // 의존성주입( Injection )

업데이트 :: 2018.08.07 의존성주입을 사용하는 이유?의존성주입 종류설정자 기반 ( Setter Injection )생성자 기반 ( Constructor Injection )필드 기반 ( Field Injection )의존성주입을 사용하는 이유?객체를 실제 코드흐름에 생성하는 것이 아닌 외부에 생성된 객체를 가져와 사용하는 방식클래스간의 결합도를 낮춰 재사용성을 높임의존성주입 종류설정자 기반 의존성 주입 방식생성자 기반 의존성 주입 방식필드 기반 의존성 주입 방식설정자 기반 ( Setter Injection )public class UserServiceImpl implements UserService { private UserRepository userRepository; private Passw..

Spring/DI & AOP 2018.08.07

학습 // Spring // DI // ApplicationContext & Bean

업데이트 :: 2018.08.07 ApplicationContext & BeanApplicationContext 가져오기Bean 가져오기AppConfigJava기반XML 기반Annotation 기반컴포넌트 스캔명시적 이름주기ApplicationContext & BeanApplicationContext & Bean을 설정하는 방법들자바기반 설정방식XML기반 설정방식Anotation기반 설정방식ApplicationContext 가져오기ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext context = new AnnotationConfigApplicationContext("..

Spring/DI & AOP 2018.08.07