https://www.inflearn.com/course/spring-framework_core
ㅇ IOC 컨테이너 1부 : 스프링 IoC 컨테이너와 빈
- BeanFactory : 인터페이스
bean들을 관리함, IOC 컨테이너
> applicationcontext : beanfactory 상속,
- Annotation이 있으면, AutoScan을 통해 Bean 객체로 등록한다.
- 스코프
> 싱글톤 : 하나의 프로그램 내에서 하나의 인스턴스만을 사용해야하는 상황에서 사용됨
> 프로포토타입 : 매번 다른 객체
ㅇ IoC 컨테이너 2부 : ApplicationContext와 다양한 빈 설정 방법
- SpringBoot 로 시작시, pom.xml 에 spring-boot-starter-web 이 들어가 있다.
이것만 있으면 spring-core 등 의존성있는 패키지들이 자동으로 받아와진다.
- xml에서 bean을 등록해서 설정할 수 있다. (옛날 방식 - ref, property 등)
context:component-scan 을 통해 bean을 경로아래에 있는 어노테이션을 읽어서 등록할 수 있다.
묶어줄때는 @Autowired, @injection을 통해 할수 있음 (Spring 2.5 부터 등장)
- applicationconfig.java 파일을 만들어서도 가능 (@Configuration)
> 호출할때 ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
> config 파일에 @ComponentScan 을 붙여서, 자동으로 객체들을 스캔하여 bean 에 등록
> 이 방법이 가장 springboot에 근접함
ㅇ IoC 컨테이너 3부 :Component와 컴포넌트 스캔
- Autowired
> 1. 생성자를 통해 의존썽 삽입 (스프링 4.3부터 생략 가능)
> 2. 필드 객체 자체 삽입
> 3. setter를 통해 삽입
- 해당 타입의 빈이 여러개인 경우
빈 이름으로 시도, 같은 이름의 빈 찾으면 해당 빈 사용, 못찾으면 실패
* 해결 방법
> @Primary 어노테이션 선언 (선호됨)
> @Qualifier 어노테이션 선언 (id는 객체의 첫글자가 소문자인 이름)
ㅇ IoC 컨테이너 4부: @Component 와 컴포넌트
- 컴포넌트 스캔의 범위 고려
- 싱글톤 bean의 경우, 초기 구동시 만드는데 시간이 오래걸려 실행시 오래걸릴 수 있음 ( 구동 시간 )
- 펑션을 사용한 빈 등록 (스프링5 부터 가능) : 리플렉션과 프록시를 사용안하기 때문에 성능(구동타임) 상에 이점이 있음
ㅇ IoC 컨테이너 5부: 빈의 스코프
- 스코프 : 싱글톤, 프로토타입 (@Scope("Prototype"))
- 프록시(프록시 패턴)를 쓰는 이유 : A -> B 로 바로 접근하는게 아니라 B를 감싸는 C 에 접근하도록 함
=> B에 대한 의존성을 줄이기 위함
> proxyMode = scopedProxyMode.TARGET_CLASS or INTERFACE
- 스코프와 Thread Safe에 대해서 생각해봐야함
> 멀티스레드 환경에서 변수에 대해 문제가 생길 수 있음
ㅇ IoC컨테이너 6부:Environment 1부. 프로파일
- ApplicationContext extends EnviornmentCapable
> getEnvironment()
- 프로파일이란? bean들의 묶음
> Enviorment라는 인터페이스로 사용
> 프로파일 설정시 @Profile() 에 조건식도 가능
ㅇ IoC컨테이너 6부:Environment 2부. 프로파일
- args 값을 받아 쓰는 방법
- @value 어노테이션 사용하기
- vm 옵션의 값이 property 로 얻는 값보다 우선순위가 높음
ㅇ IoC컨테이너 7부: MessageSource
- 부트는 messages 라는 파일들을 자동으로 읽어줌
ㅇ IoC컨테이너 9부: ResourceLoader
- File.readString 은 자바 11버전부터 쓸수 있음
- classPath 로 빌드된 타겟폴더 아래에서부터 접근 가능
'Spring' 카테고리의 다른 글
[Spring] 스프링 부트 개념과 활용 - 4 (0) | 2021.07.19 |
---|---|
[Spring] 스프링 부트 개념과 활용 - 3 (0) | 2021.07.19 |
[Spring] 스프링 부트 개념과 활용 - 2 (0) | 2021.07.10 |
[Spring] 스프링 부트 개념과 활용 - 1 (0) | 2021.07.10 |
[Spring] 스프링 프레임워크 핵심 기술 정리 - 2 (0) | 2021.07.05 |