Spring

[Part 1] 의존성 주입 실습 #4

충 민 2023. 1. 8. 22:11

옛날에는 개발자가 직접 코드를 만들어서 new를 하고 의존성을 서로 연결을 시켜주고 이런 일을 했는데

스프링 프레임 워크는 그럴 필요 없고 내가 선언을 하면 스프링이 객체를 넣어준다 라고 생각하고서 

실습으로 자세히 알아볼 것이다. 저번 글에서 롬복을 세팅하였고 그 롬복을 이용하여 시작할 것이다.

 

우선 패키지와 클래스를 만든다.

 

그 다음 어노테이션을 입력하면 자동으로 임포트가 된다.

 

package org.zero.sample;

import org.springframework.stereotype.Component;

@Component
public class Chef {

}

 

그리고 context 들어간다.

 

 

그 후 이렇게 집어넣는다

 

 

자 그러면 Chef라는 클래스에서 나온 객체는 관리가 된다.

 

그리고 롬복 설정을 위해 어노테이션을 추가해준다.

 

 

이제 restaurant클래스를 하나 만들어준다. 그리고 계속 사용할 클래스이니 Component를 어노테이션 해준다.

 

또 Autowired라는 어노테이션을 달아주었다.

 

 

그렇게 되면 S자 하나가 생긴다 저 S자는 스프링이 이 클래스를 bean으로 관리하기 시작했다는 것이다.

 

 

 

그리고 ToString 까지 적어보겠다.

 

 

 

 

간단하게 말해서 이 전체 코드는 주입이 끝난 것이다.

"저는 이 Chef라는 객체를 만들때 주입을 좀 해주세요" "연결을 좀 해주시겠어요?" 라는 뜻이다.

이제 라이브러리를 추가해볼 것이다. 다시 porm.xml로 가서 

 

 

 

 

4.7  => 4.12 버전으로 고쳐준다.

 

 

 

 

그리고 이 코드를 삭제해주고 밑의 사진처럼 1.2.17버전으로 바꾸어준다.

 

 

 

 

이 위의 코드는 run time에서만 쓰겠다 라는 뜻인데 우리는 더 많은 곳에서 활용해야해서 바꾸어준다.

 

 

 

 

 

테스트 라이브러리도 추가해준다.

이제 의존성이 잘일어나는지 test를 해보겠다.

 

 

 

 

패키지와 클래스를 생성해주고 코드를 작성한 후 실행해보면??

 

 

package org.zero.sample;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class SampleTests {
	@Test
	public void test1() {
		System.out.println("test!!!!!!!!!!");
		log.info("Testseeeeeeeeeeeee");
	}
}

 

 

 

로그가 찍히는 모습을 볼 수 있다.

이제 레스토랑을 가져와보겠다.

 

 

 

 

 

이렇게 로그를 찍어본다면??

 

 

 

 

 

어? 나는 분명 Restaurant클래스에 아무것도 만들지 않았는데 chef가 찍힌다. 이미 자동으로 만들어준다...이게 스프링의 무서운 점이다.

만약 Restaurant클래스에서 Autowired를 지워본다면?

 

 

 

 

Chef를 잡아주지 못하여 null이 뜬다. 

여기서 3가지가 있다.

  • Setter주입
  • 생성자 주입
  • 필드 주입

우리가 한 Autowired는 필드 주입인데 그렇게 좋지는 않다.

Setter주입 

한마디로 set메소드를 만드는 것이다

package org.zero.sample;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ResponseStatus;

import lombok.Setter;
import lombok.ToString;

@Component
@ToString
public class Restaurant {
	@Setter(onMethod_ = {@Autowired})
	private Chef chef;

}

 

 

위 코드를 저장하고 run하게되면 set메서드가 생기고

 

 

 

 

Chef도 다시 잡아준다.

 

생성자 주입

 

그리고 마지막으로 생성자 주입은 

 

 

 

 

이 한 줄만 추가해준다면 다시 Chef를 잡아준다.

 

 

final 필드 자동주입기능

그리고 요즘은 5버전에서 쓰는 방법인데 final 필드 자동주입기능이다

 

의존성주입에 대한 테스트는 여기서 마치겠다. 다음 글에서 이어서 해보겠다.