2023.02.21 / Spring

기가지니·2023년 2월 21일
1

Spring container

=> 객체를 생성

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

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에 전달할 인자

  • Application context는 Bean을 사용하기 위한 설정정보가 있어야함
    XML또는 Annotation방식을 통한 사용
    (annotation이 편함)

(그림첨부)
XML -> Sprng IoC container -> application
빈을 등록하기 위한 설정 정보를 어떻게 해야하나요?

  • Bean등록 방법

    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을 관리하나요?
스프링은 서버쪽 어플리케이션을 구현하기 위하여 사용
-> 여러 클라이언트에 의해서 공유되는 객체가 필요
싱글톤으로 처리해야 효율이 좋아요!

  • 의존관계 (dependency)
    두개의 class를 대상으로 함. 방향성을 명시해야해요

    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를 설정할 수 있으므로 추가적인 기능을 포함할 수 있음

profile
지니야 코딩 해줘

0개의 댓글