일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 김영한
- 오블완
- 오버라이딩
- 코드트리
- 스프링컨테이너
- 코드트리조별과제
- 다형성
- ocp
- 테스트코드
- fielderror
- JSON
- HttpServletResponse
- java
- 서블릿
- 참조변수
- 백준
- 프록시
- 스프링
- html form
- objecterror
- equals()
- 싱글톤
- http 메시지 컨버터
- 코딩테스트
- 추상클래스
- 티스토리챌린지
- 인터페이스
- 의존관계
- DI
- @configuration
- Today
- Total
목록TIL/김영한의 스프링 핵심 원리 (34)
minOS
@Configuration과 바이트코드 스프링 컨테이너는 싱글톤 레지스트리다. 따라서 스프링 빈이 싱글톤이 되도록 보장해주어야 한다. 전 게시물은 자바 코드를 3번 호출 하는 것이 맞다. 그래서 스프링은 클래스의 바이트 코드를 조작하는 라이브러리를 사용한다. @Configuration을 적용한 AppConfig 클래스 타입을 보면 $$SpringCGLIB$$0이 붙는다. 순수한 클래스라면 example.core.AppConfig가 출력되어야한다. AppConfig$$SpringCGLIB$$0 내가 만든 클래스가 아니라 스프링이 CGLIB라는 바이트 코드 조작 라이브러리를 사용해서 AppConfig클래스를 상속받은 임의의 다른 클래스를 만들고 , 그 다른 클래스를 스프링 빈으로 등록한 것이다. AppCo..
AppConfig코드 @Configuration // 설정 정보 public class AppConfig { //@Bean memberService -> new MemoryMemberRepository() //@Bean orderService -> new MemoryMemberRepository() @Bean //스프링 컨테이너에 빈 등록 public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } @Bean public OrderService or..
싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결해서 , 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다. 스프링 빈이 바로 싱글톤으로 관리되는 빈이다. 싱글톤 컨테이너 - 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리한다. ㄴ 이전에 설명한 컨테이너 생성 과정을 자세히 보면(https://onepunchprogram.tistory.com/41) 컨테이너는 객체를 하나만 생성하여 관리한다. - 스프링 컨테이너는 싱글톤 컨테이너 역할을 한다. 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리라 한다. - 스프링 컨테이너의 이런 기능 덕분에 싱글턴 패턴의 모든 단점을 해결하면서 객체를 싱글톤으로 유지할 수 있다. ㄴ 싱글톤 패턴을 위해 지저분한..
웹 애플리케이션과 싱글톤 - 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. - 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 아닌 애플리케이션 개발할 수 있다. - 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 문제 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청할 때마다 객체를 새로 생성한다. 고객 트래픽이 초당 100이 나오면 100개의 객체가 생성되고 소멸된다 -> 메모리 낭비가 심하다. 해결방안은 해당 객체가 1개만 생성되고,공유하도록 설계하면 된다. -> 싱글톤 패턴 public class SingletonTest { @Test @DisplayName("스프링이 없는 순수한 DI 컨테이너") void pureContainer(){ AppConf..
스프링 빈 설정 메타 정보 - BeanDefinition 새로운 형식의 설정 정보가 추가되면 XxxBeanDefinitionReader를 만들어서 "BeanDefiniton"을 생성하면된다. BeanDefiniton 정보 - BeanClassName : 생성할 빈의 클래스 명 (자바 설정처럼 팩토리 역할의 빈을 사용하면 없음) - factoryBeanName : 팩토리 역할의 빈을 사용할 경우 이름 ex) appConfig - factorymethodName: 빈을 생성할 팩토리 메서드 지정 ex) memberService - Scope: 싱글톤(기본값) - lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라 , 실제 빈을 사용할 때 까지 최대한 생성을 지연처리 하는지 여부 - In..
BeanFactory와 ApplicationContext BeanFactory - 스프링 컨테이너의 최상위 인터페이스다. - 스프링 빈을 관리하고 조회하는 역할을 담당한다. - getBean()을 제공한다. - 지금까지 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. ApplicationContext - BeanFactory 기능을 모두 상속받아 제공한다. - Bean을 관리하고 검색하는 기능은 BeanFactory가 제공해주는데, 둘의 차이는 ? - 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론이고, 수 많은 부가 기능이 필요하다. 1) 메세지 소스를 활용한 국제화 기능 웹사이트 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 2) 환경 변수 로컬,개발,..