Spring106 [스프링 핵심 원리 - 기본편] 컴포넌트 스캔과 의존관계 자동 주입 시작하기 스프링 빈을 자바 코드나 XML 등을 통해서 설정 정보에 직접 등록할 경우 등록해야 할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제도 발생합니다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공합니다. 또 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공합니다. AutoAppConfig.java @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } 컴포넌트 스캔을 사용하려면 먼저.. 2021. 9. 19. [스프링 핵심 원리 - 기본편] @Configuration과 바이트코드 조작의 마법 스프링 컨테이너는 싱글톤 레지스트리입니다. 따라서 스프링 빈이 싱글톤이 되도록 보장해주어야 합니다. 그래서 스프링은 클래스의 바이트코드를 조작하는 라이브러리를 사용합니다. 모든 비밀은 @Configuration을 적용한 AppConfig에 있습니다. @Test void configurationDeep() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); AppConfig bean = ac.getBean(AppConfig.class); System.out.println("bean = " + bean.getClass()); } 사실 AnnotationConfigApplicationC.. 2021. 9. 18. [스프링 핵심 원리 - 기본편] @Configuration과 싱글톤 AppConfig의 이상한 점 @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } ... } memberService 빈을 만드는 코드를 보면 memberRe.. 2021. 9. 18. [스프링 핵심 원리 - 기본편] 싱글톤 방식의 주의점 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안됩니다. 무상태(stateless)로 설계해야 합니다. 특정 클라이언트에 의존적인 필드가 있으면 안됩니다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안됩니다. 가급적 읽기만 가능해야 합니다. 필드 대신에 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야 합니다. 스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있습니다. 상태를 유지할 경우 발생하는 문제점 예시 public class StatefulService.. 2021. 9. 17. 이전 1 ··· 4 5 6 7 8 9 10 ··· 27 다음