@Configuration
스프링 기본 - @Configuration과 바이트코드 조작의 마법
스프링 기본 - @Configuration과 바이트코드 조작의 마법
2022.05.30@Configuration과 바이트코드 조작의 마법 스프링 컨테이너는 싱글톤 레지스트리다. 따라서 스프링 빈이 싱글톤이 되도록 보장해주어야 한다. 그런데, 스프링이 자바 코드까지 어떻게 하기는 어렵다. 이전시간에 보았던 AppConfig의 자바코드를 보면 memberRepsository가 분명 3번 호출되어야 하는 것이 맞다. 그래서 스프링은 클래스의 바이트코드를 조작하는 라이브러리를 사용한다. 모든 비밀은 @Configuration을 적용한 AppConfig에 있다. 다음 코드를 보자. 사실 AnnotationConfigApplicationContext에 파라미터로 넘긴 값은 스프링 빈으로 등록된다. 그래서 AppConfig도 스프링 빈이 된다. AppConfig 스프링 빈을 조회해서 클래스 정보를 출..
스프링 기본 - @Configuration과 싱글톤
스프링 기본 - @Configuration과 싱글톤
2022.05.28@Configuration과 싱글톤 다음 AppConfig 코드를 보자. memberService 빈을 만드는 코드를 보면, memberRepository() 를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository()를 호출한다. orderService빈을 만드는 코드도 동일하게 memberRepository()를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository()를 호출한다. 결과적으로 각각 다른 2개의 MemoryMemberRepository가 생성되면서 싱글톤이 깨지는 것 처럼 보인다. 스프링 컨테이너는 이 문제를 어떻게 해결할까? 직접 테스트 해보자. 검증 용도의 코드 추가 (MemberServiceImpl, OrderServiceImp..
스프링 기본 - 스프링으로 전환하기
스프링 기본 - 스프링으로 전환하기
2022.05.26스프링으로 전환하기 지금까지 순수한 자바 코드만으로 DI를 적용했다. 이제 스프링을 사용해보자. 지금은 코드만 작성하고 설명은 마지막에 하도록 하겠다. AppConfig 스프링 기반으로 변경 AppConfig 에 설정을 구성한다는 뜻의 @Configuration을 붙여준다. 각 메서드에 @Bean을 붙여준다. 이렇게 하면 스프링 컨테이너에 스프링 빈으로 등록한다. MemberApp에 스프링 컨테이너 적용 OrderApp에 스프링 컨테이너 적용 두 코드를 실행하면 스프링 관련 로그가 몇줄 실행되면서 기존과 동일한 결과가 출력된다. 스프링 컨테이너 ApplicationContext를 스프링 컨테이너라 한다. 기존에는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 DIㄹㄹ 했지만, 이제부터는 스프..
스프링 입문 - 자바 코드로 직접 스프링 빈 등록하기
스프링 입문 - 자바 코드로 직접 스프링 빈 등록하기
2022.05.19저번시간에는,@Service, @Repository, @Autowired, 등을 이용하여 컴포넌트 스캔으로 스프링 컨테이너에 스프링빈으로 자동으로 등록하고, 연결하는 것을 자동으로 했는데, 이번시간에는, 자바 코드로 하나하나 직접 스프링 빈을 등록해보도록 하겠다. MemberService와 MemberRepository의 @Service, @Repository, @Autowired 애너테이션을 제거하고 진행하도록 하자. (MemberController 는 그대로 둔다.) 지우고나서 돌려보면, 당연히 스프링이 올라올 때 컴포넌트 스캔이 안되므로, MemberService가 스프링빈에 등록되어있지 않다. 그래서 이처럼 오류가 난다. 컴포넌트 스캔방식 말고, 직접 등록하는 방식에 대해 알아보자. SpringC..