일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 추후정리
- 포트
- AuthenticationEntryPoint
- 적용우선순위
- 예약
- subquery
- 외부키
- 2 > /dev/null
- 커밋메세지수정
- foreignkey
- EC2
- 검색
- application.yml
- 테스트메소드
- WeNews
- docker명령어
- appspec
- ㅔㄴ션
- 메소드명
- Query
- 네이티브쿼리
- appspec.yml
- 컨테이너실행
- 테스트
- MySQL
- querydsl
- 메세지수정
- ubuntu
- 서브쿼리
- 참조키
- Today
- Total
제뉴어리의 모든것
[스프링 입문] spring ioc 본문
아래의 내용은 백기선님의 "예제로 배우는 스프링 입문 (개정판)" 의
스프링 IoC 컨테이너, 스프링빈, 의존성 주입을 공부한 내용임
- IOC란
제어권의 역전
예를들어, 특정 클래스 안에 존재하는 멤버변수를 해당 클래스에서는 변수 정의만 하고
생성자와 같은 메소드에서 파라미터로 전달받아 멤버변수에 저장하여 사용하는것.
즉, 사용할 객체를 클래스 스스로 만들어 사용하는것이 아니라 외부에서 받아서 오므로 제어권이 역전되었다고 한다.
- SPRING IOC 컨테이너
Bean을 만들고 엮어주며 제공하여 Bean 객체를 관리하는것.
엮어준다는것은 예를 들어 SPRING 프레임워크로 개발을 할때 Controller에 어떤 Get 요청이 왔을때 매핑시킨 메소드에
개발자는 파라미터로 Repository나 ModelAttribute 같은 것들을 만드어서 해당 메소드에서 조작이 가능하다.
그렇다면 그런 파라미터들은 어디서 보내주는것인가? 그것이 바로 SPRING IOC 컨테이너가 엮어주는것이다.
Repository나 ModelAttribute 같은 것들은 Bean이기 때문에
그렇다면
- Bean이란
자바 객체이다. 그렇지만 프로그래머들이 메소드 상에 Myclass myClass = new Myclass() 와 같이 만들어서 사용하는 객체가 아니라 하지만 SPRING IOC에 등록되있으면 관리되는 자바객체이다.
그렇다면 Bean은 어디서 만들어지는가?
바로 BeanFactory이다
- BeanFactory
Bean을 만드는 인터페이스
- Application context
BeanFactory와 여러 클래스들을 상속받는 클래스로
모든 Bean객체들에게 접근이 가능하고 Bean 객체들을 직접 사용하게 해주는 객체이다
그렇다면 스프링 프레임워크에 원래 존재하는 여러 클래스 중 어떤 클래가 Bean이고 일반 클래스인가..
구별 방법은
1. 특정 @(애노테이션)이 붙은 경우
ex : controller..
Controller 애노테이션 내부를 보면 @Component가 존재한다
@Component가 붙은 클래스들은 모두 Bean객체로 생성된다
2. 특정 인터페이스가 붙은 경우
ex : Repository...
public interface OwnerRepository extends Repository<Owner, Integer> 와 같이
Repository 인터페이스를 구현하는 객체는 Bean 객체로 생성된다
3. 직접 XML 파일이나 자바설정 파일에 등록 된 경우
- 자바 설정파일 만드는 방법
1. 자바빈으로 만들고 싶은 java class 파일 하나를 만든다
2. 설정파일로 쓸 java class 파일을 하나 더 만든다
3. 설정파일 클래스에 @Configuration이라는 애노테이션을 붙임
4. 자바빈으로 만든 객체를 반환하는 함수 하나를 만들고 @Bean 애노테이션을 붙인다
- 의존성 주입이란
IOC 컨테이너가 Bean 객체를 자동으로 파라미터로 넘겨주는것.
ex : Controller안에있는 메소드들 안에 Repository같은 파라미터 지정하면 알아서 스프링이 해당 객체 넘겨줌
추가적인 내용들....
- @ResponseBody -> 문자열 자체가 응답 본문이 되도록 해줌.. (특정 Get, Post요청 메세지에 View를 띄우는것이 아니라..)
- 싱글톤 스코프 객체
어떠한 객체 하나를 app 전반에서 사용하는 객체.
ex : Bean 객체들(Controller, Repository..)
- Application Context -> bean들을 접근할 수 있는 인터페이스가 구현 되어 있어서 빈들에게 접근 가능
ex : application.getbean()