카테고리 없음

스프링 프레임워크 05) Spring Core

pakms980319 2024. 4. 29. 15:56

Spring Core 란? - Spring Container

Spring 프레임워크의 근간이 되는 요소로 DI, IoC 기능을 지원하는 영역을 담당한다

빈 저장소를 기반으로 빈 클래스들을 제어할 수 있는 기능을 지원하기도 한다

빈 저장소의 경우, IoC 패턴이 적용되어 객체 구성부터 의존성 처리까지 모든 일을 처리하는 핵심적인 역할을 한다

 

Container 는 개발자를 대신하여 Bean 을 생성/관리/제거 한다

추가로 독립적인 코드를 어노테이션 (@Bean) 으로 넘겨주면 Container 가 알아서 호출해준다

 

Container 가 개발자를 대신하여 메서드(코드)를 호출 및 필요한 자원을 전달하는 설계 구조를 IoC(Inversion Of Container / 제어 반전)이라고 한다.

 

IoC 는 메서드가 필요로 하는 자원들을 코드가 실행되는 타임에 전달을 하는데, 이를 DI(Dependency Injection / 의존성 주입) 이라고 한다

 

Dependency Injection 은 Reflection 이라는 기술을 기초로 구현되어 있다. Reflection 기술은 런타임에 코드의 메타 데이터를 읽는 기술이다. 특히 메서드의 Singnature 를 읽을 수 있고, Signiture 에 메서드가 필요로 하는 매개변수 정보가 있다. Dependency Injection 은 Reflection 으로 얻은 코드 데이터로 메서드가 필요로 하는 자원을 런타임에 제공한다

 

 

자원을 직접 조작하고 싶을 경우 Container의 설정 정보가 담긴 xml 문서를 변경하면 된다

런타임을 조작하고 싶다면 ApplicationContext 객체를 사용하면 된다

 

 


 

 

1. Bean 추가 하는 법 (xml 방식)

root-context.xml 파일에 아래의 bean 태그를 작성한다

 

 

root-context.xml > Beans Graph

 

root-context.xml 의 <Beans Graph> 에 Bean이 등록된 것을 확인할 수 있다

 

root-context.xml > Beans Graph

 

Bean 을 하나 더 추가하면 위 사진처럼 Bean 이 추가된다

 

 


 

 

2. 추가한 Bean 사용하는 방법 (xml 방식 추가)

 

 

테스트 파일 만들기

test/java > 테스트 코드작성

 

 

해당 실습을 하기 위해서  테스트 파일에서 root-context.xml 파일을 읽어오는 작업이 필요하다

(Spring-Test 외부 라이브러리 필요)

 

Spring-Test
pom.xml > dependency 추가

 

  • scope 를 지운다
  • version 을 현재 springframework-version 에 맞추기 위해 위 el 표현식을 작성한다

 

 

테스트 코드에서 Bean을 불러와 사용

DiTests 테스트 코드

 

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")

 

root-context.xml 파일을 읽어 bean 정보를 읽어온다

 

 

 

  • @Autowired 어노테이션을 사용하여 변수에 Bean 을 등록해준다
  • 이 때, 등록되는 객체는 컨테이너에서 생성된 객체를  사용한다 (최초 한번 생성)

 

실행 결과

 

 


 

 

3. Bean 객체의 멤버 변수값 지정 (xml 방식)

 

 

  • constructor-arg 태그를 사용하여 멤버 값을 지정해준다
  • name 은 멤버변수 명, value 는 기입할 값이다

 

위 설정을 root-context.xml 파일에 작성한 후

아까 작성한 테스트 코드를 실행하면 아래와 같이 결과가 나온다

 

실행 결과

 

Person 객체의 멤버 변수 값이 잘 지정되었다

 

 

 


 

 

 

Java 파일에서 Bean 생성 하는 법 (Config)

 

root-context 에 component-scan 태그 작성하기

 

component-scan에서 자바 config 파일이 작성될 패키지를 base-package로 등록해준다

 

 

 

빨간줄은 root-context의 Namespaces에서 context를 등록해줘야한다

 

beans에 등록된 context namespace

 

 

 

 

java config 파일

 

Config 파일을 만든다

 

 

Config 파일의 클래스는 @Configuration 어노테이션을 달아줘야한다

 

 

@Bean 어노테이션을 통해 Bean을 등록한다

 

root-context.xml > Beans graph

 

root-context 의 beans graph에서 자바 파일에서 등록한 Bean 을 확인할 수 있다

 

@Bean(name=" ... ")

@Bean 어노테이션에서 name 속성을 통해 빈의 이름을 직접 지정해 줄 수도있다

 

 

테스트 코드

 

xml 으로 설정할 때와 마찬가지로 빈을 등록할 때 설정한 이름과 동일하게 변수명을 설정해야 autowired 된다

 

실행 결과

 

 

ApplicationContext 객체

 

 

 

applicationContext에서 빈을 꺼내올 수 있다

getBean()의 반환형은 Obejct

 

 

실행 결과