=> 객체를 생성
Application context
가장중요한 작업은 Bean을 생성하고 Bean간의 관계를 설정
bean factory라고도 함.
Bean : 스프링에서 관리하는 객체, id나 type을 통해 인지해서 가져올 수 있음
Bean Factory : Bean의 생성과 설정, 관리 등의 역할하는 컨테이너 (객체들의 모음)
스프링 컨테이너의 최상위 컨테이너이며, ApplicationContext와 함께 스프링 컨테이너라고 불림
스프링 컨테이너는 처음 실행할 때 XML에 등록해놓은 모든 객체들을 Bean으로 만들어놓음
IoC 컨테이너는 필요할 때 Bean으로 등록된 객체를 가져다가 씀!
(Bean들을 관리하는 것은 Bean Factory)
✔️ DI container, Spring IoC container, spring container, Application context 용도에 따라 다르게 부르지만 다 같은 의미. aka Application context
Application context가 제어권을 가지고 직접 만들고 관계를 부여하는(dependency) 객체는 Bean
-> POJO(Plain Old Java Object)
일반 자바 클래스
Spring Ioc DI container에 의해서 관리됨
🐈⬛Bean의 주요 속성
class : bean으로 등록한 Java class
id : bean을 구별하기 위한 식별자
scope : singleton, prototype
constructor arg : bean객체 생성 시 생성자에 전달할 인자
property : bean객체 생성 시 setter에 전달할 인자
(그림첨부)
XML -> Sprng IoC container -> application
빈을 등록하기 위한 설정 정보를 어떻게 해야하나요?
1) 수동방법
2) 자동방법
컴포넌트를 스캔하는 방법
DAO팩토리를 application context에 적용해보자
class MyResourse {}
등록하기 위한 설정정보가 있어야 해요
⬇️⬇️
@configration // 설정정보를 갖고있는걸 빈으로 등록. application contextrk
class MyResourse config{
@Bean //이렇게 빈으로 설정 메소드를 호출해서 빈 객체를 만듬
public MyResourse getResourse(){
ruturn new MyResourse();
}
}
하위 annotation
@controller, @service, @repasitory, @configration
자동으로 bean을 등록시킬 수 있음!
Bean을 연습해보자
Bean은 일반 클래스를 싱글톤으로 만들어준다.(context가 알아서처리)
❓왜 Singleton으로 Bean을 관리하나요?
스프링은 서버쪽 어플리케이션을 구현하기 위하여 사용
-> 여러 클라이언트에 의해서 공유되는 객체가 필요
싱글톤으로 처리해야 효율이 좋아요!
A라는 클래스가 있고 B라는 클래스가 있다.
A class ➡️ B class
A는 B에 의존하고 있고 B의 내용이 바뀌면 A의 내용이 바뀜
A의 입장에서는 의존(dependency)대상인 B가 변하면 그 영향이 A까지 미친다
단, B는 A에 dependency하지 않으면 영향을 미치지X
Application context, Bean, configratin, metadata(annotation) 개념을 알아두자
✔️XML을 이용한 설정을 해보자
annotation이 빠짐.
DAO에서 Bean이 빠지고 별도의 XML로 가지고 감
xml은 문서에 대한 구조가 미리 정해진 형태로 만들어졌는지 검증하는 기능이 있음
(어떤(mybatis, aplication등등) xml이냐에 따라 사용가능한 태그와 태그의 구조가 이미 결정결되어 있어요)
2가지로 검증작업을 할 수 있어요
1) DTD
2) Schema⭐
: 별도의 namespace를 설정할 수 있으므로 추가적인 기능을 포함할 수 있음