Spring/기본 (3) 썸네일형 리스트형 컴포넌트 스캔 1. @ComponentScan @Bean붙일 필요 없이 @Component적힌 자동 스프링 빈 등록 (하나의 AppConfig로 관리 안해도 됨.) @ComponentScan시 @Configuration 붙은 설정들도 자동 등록 됨 basePackages를 이용해 시작 위치를 지정할 수 있다. 이때 이 패키지를 포함해서 하위 패키지를 모두 탐색 basePackage = { "hello.core", "hello.service"} 이렇게 여러 시작 위치 지정할 수도 있다. 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다. 권장방법1: 설정 정보클래스의 위치를 프로젝트 최상단에 두기 권장방법2: 스프링 부트면 @SpringBootApplication를 프로젝트.. 싱글톤 (웹과 관련하여) 1. 스프링과 비교 웹 어플리케이션은 보통 여러 고객이 동시에 요청 스프링없는 순수한 DI 컨테이너는 AppConfig 요청을 할떄마다 객체 생성. 객체 인스턴스를 생성하는 비용이 1000 이라면 가져오는 비용은 1정도로 차이가 큼. 2. 싱글톤 패턴의 문제점 싱글톤 패턴 구현 코드 많이 들어감. 의존 관계상 클라이언트가 구체 클래스에 의존(DIP 위반) 클라이언트가 구체 클래스에 의존해서 OCP위반 가능성 높음. 테스트 하기 어려움. 내부 속성을 변경ㅎ거나 초기화 하기 어렵다. private생성자로 자식 클래스를 만들기 어렵다. 결론적으로 유연성 떨어진다. 안티패턴으로 불리기도 한다. 3. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤으로 관리한다. 스프링.. 의존성 자바코드 기반 1. 기본적인 방식의 의존 MemberService service = new MemberServiceImpl(); 문제점: OCP & DIP 문제 특히 DIP에서는 인터페이스와 구현 클래스 함께 의존 2. AppConfig를 통해 의존성 분리 public class AppConfig{ public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } } //Impl 생성자 public MemeryServiceImpl(MembmerRepository m.. 이전 1 다음