일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Spring
- HLB
- Java
- 자바
- 금융감독원
- 코드스테이츠 합격 후기
- 보험금 지급거절
- 코테 합격후기
- 겜스고
- 코드스테이츠 백엔드 교육과정
- 백내장 다초점렌즈 삽입술
- 코드스테이츠 백엔드 부트캠프 합격
- 금융감독원 민원신청
- Code States 백엔드 합격 후기
- 코드 스테이츠 백엔드 교육과정
- 해시
- 에이치엘비
- 코드스테이츠 부트캠프 합격 후기
- CodeState 후기
- 백내장 금감원
- Gamsgo
- 백내장
- 코드스테이츠 백엔드 후기
- 코드스테이츠 합격
- codestates 국비지원 1기 합격 후기
- 백준 알고리즘
- 금감원 백내장 민원
- 메서드
- 코드스테이츠 부트캠프
- 금감원
Archives
- Today
- Total
개발하는 동그리
[Spring] 스프링 컨테이너 본문
반응형
스프링 컨테이너
스프링 프레임워크의 핵심 컴포넌트이며, 내부에 존재하는 애플리케이션 빈의 생명주기를 관리한다.
( bean 생성, 관리 제거 등의 역할)
- 스프링 컨테이너는 인터페이스로 구현되어 있으며, 여러 개의 객체로 구성되어 있다.
- 스프링 컨테이너는 XML, 애너테이션 기반의 자바 설정 클래스로 만들 수 있다.
- 예전에는 개발자가 xml을 통해 모두 설정했지만, Spring Boot를 통해 쉽게 설정할 수 있게 되었다.
- 빈의 인스턴스화, 구성, 전체 생명 주기 및 제거까지 처리한다.
- 컨테이너는 개발자가 정의한 bean을 객체로 만들어 관리하고 개발자가 필요할 때 제공해준다.
- 스프링 컨테이너를 통해 원하는 만큼 많은 객체를 가질 수 있다.
- 의존성 주입을 통해 애플리케이션의 컴포넌트를 관리한다.
- 스프링 컨테이너는 서로 다른 빈을 연결해 애플리케이션의 빈을 연결하는 역할을 한다.
- 개발자는 모듈 간에 의존 및 결합으로 인해 발생하는 문제로부터 자유로울 수 있다.
- 메서드가 언제, 어디서 호출되어야 하는지, 메서드를 호출하기 위해 필요한 매개 변수를 준비해서 전달하지 않는다.
- 애플리케이션에서 많은 객체가 서로 참조하게 되어있는데, 낮은 결합도와 높은 캡슐화를 통해 객체지향 프로그래밍을 하기 위해 방법으로 스프링 컨테이너를 이용한다.
- 기존에는 새로운 정책이 생기면 변경 사항을 수작업으로 수정했으나, 스프링 컨테이너를 통해 인터페이스에 의존해서 구현 클래스를 쉽게 수정, 생성할 수 있다.
- 스프링 컨테이너는 Configuration Metadata를 사용한다.
// Spring Container 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
- 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용하여, 스프링 빈을 등록한다.
- new AnnotationConfigApplicationContext(구성정보.class)로 스프링에 있는 @Bean의 메서드를 등록합니다.
- 애너테이션 기반 컨테이너 구성
- 애너테이션 기반의 자바 설정 클래스로 Spring을 만드는 것을 의미합니다.
- 스프링 컨테이너를 만드는 다양한 방법은 ApplicationContext 인터페이스의 구현체입니다.
- AppConfig.class 등의 구성 정보를 지정해줘서 스프링 컨테이너를 생성해야 합니다.
- AppConfig에 있는 구성 정보를 통해서 스프링 컨테이너는 필요한 객체들을 생성하게 됩니다.
- 애플리케이션 클래스는 구성 메타데이터와 결합되어 ApplicationContext 생성 및 초기화된 후 완전히 구성되고 실행 가능한 시스템 또는 애플리케이션을 갖게 됩니다.
- 스프링 빈 조회에서 상속관계가 있을 시 부모 타입으로 조회하면 자식 타입도 함께 조회합니다.
- 모든 자바 객체의 최고 부모인 object타입으로 조회하면 모든 스프링 빈을 조회합니다.
스프링 컨테이너의 종류
파라미터로 넘어온 설정 클래스 정보를 참고하여 빈의 생성, 관계 설정 등의 제어 작업을 하는 컨테이너
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스
- BeanFactory는 빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할
- getBean() 메서드를 통해 빈을 인스턴스 화할 수 있다.
- @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용해 빈 등록을 한다.
ApplicationContext
- BeanFactory 기능을 상속받아 제공한다.
- 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고 그 외의 부가기능을 제공한다.
- 부가기능
- MessageSource : 메시지 다국화를 위한 인터페이스
- EnvironmentCapable : 개발, 운영 등 환경변수 등으로 나눠 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스
- ApplicationEventPublisher : 이벤트 관련 기능을 제공하는 인터페이스
- ResourceLoader : 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회
컨테이너의 인스턴스화
- ApplicationContent 생성자에 제공된 위치 경로 또는 경로는 컨테이너가 로컬 파일 시스템, java CLASSPATH등과 같은 다양한 외부 리소스로부터 구성 메타데이터를 로드할 수 있도록 하는 리소스 문자열이다.
New 키워드를 대신한 생성자 주입 코드
- 의존 객체가 주입되어, 느슨한 의존 관계 성립
- 실제 구현 클래스는 Bean 설정에 따라 유연하게 변할 수 있음
- 어떤 객체가 주입될지 결정하는 것은 외부 (AppConfig)에 의해 결정된다.
- 해당 클래스는 어떤 객체와도 연관성 없이 오직 실행만 담당한다.
Bean
스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트로, Spring 컨테이너가 관리하는 자바 객체를 의미하며, 하나 이상의 빈을 관리한다.
- 빈은 인스턴스화 된 객체를 의미한다.
- 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
- @Bean이 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 자동 등록된다.
- @Configuration 구성정보를 담당하는 것을 설정할 때 사용한다.
- 빈은 클래스의 등록정보, getter/setter 메서드를 포함한다.
- 빈은 컨테이너에 사용되는 설정 메타데이터로 생성된다.
- 설정 메타데이터
- xml 또는 자바 애너테이션, 자바 코드로 표현한다.
- 컨테이너의 명령과 인스턴스화, 설정, 조립할 객체를 정의한다.
Bean 접근 방법
- ApplicationContext 사용하여 Bean을 읽고 액세스 할 수 있다.
- getBean을 이용하여 bean의 인스턴스를 가져올 수 있다.
- ApplicationContext 인터페이스는 bean을 가져오는 몇 가지 방법들이 있다.
- 실제적으로 응용 프로그램 코드에서는 getBean() 메서드로 호출하여 사용하면 안 된다.
// create and configure beans
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
// retrieve configured instance
PetStoreService service = context.getBean("cmarket", cmarketService.class);
// use configured instance
List<String> userList = service.getUsernameList();
BeanDefinition
스프링은 다양한 설정 형식을 BeanDefinition이라는 추상화 덕분에 지원이 가능하다.
- Bean은 BeanDefinition(빈 설정 메타정보)로 정의되고 BeanDefinition에 따라 사용하는 방법도 달라진다.
- BeanDefinition (빈 설정 메타정보)
- 속성에 따라 컨테이너가 bean을 어떻게 생성하고 관리할지 결정
- @Bean or <bean> 당 각 1개씩 메타 정보가 생성된다.
- Spring이 설정 메타정보를 BeanDefinition 인터페이스를 통해 관리하기 때문에 컨테이너 설정을 XML, Java로 할 수 있다.
- 스프링 컨테이너는 설정 형식이 xml인지 java인지 모르고 BeanDefinition만 알면 된다.
반응형
'IT 정보 > Spring' 카테고리의 다른 글
[Spring] 스프링 컨테이너와 빈 ( 생성, 등록, 조회 ) (44) | 2022.06.17 |
---|---|
[Spring] Bean Scope (Singleton pattern) (43) | 2022.06.16 |
[Spring] FrameWork (36) | 2022.06.15 |
[네트워크] HTTP 메서드 (44) | 2022.06.08 |
[네트워크] HTTP 헤더 2 (30) | 2022.06.07 |