의존성 주입 A>>>>>>>> ??? >>>>>>>BA A객체는 B가 필요하다는 신호만 보내고 B객체를 주입하는 것은 외부에서 이루어짐 의존성 주입을 위해 ??? 존재가 필요하다. ??? : ApplicationContext => 필요한 객체를 생성하고, 필요한 객체들을 주입해주는 역할
따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고 이러한 객체를 엮는(Wiring) 작업의 형태로 개발한다.
src/main/java -> com.koreait.board -> new -> Package
pakage에 새 클래스 추가
public class 위에 @Data를 입력한 후 저장하면 자동으로 import lombok.Data; 가 임포트 됨.
com.koreait.board.util Package를 생성한다
MyUtil.java
package com.koreait.board.util;
public class MyUtil {
public final static String BLUE = "\033[94m";
public final static String END = "\033[0m";
public final static String BOLD = "\033[1m";
}
src/test/java -> com.koreait.board 에 똑같이 com.koreait.board.bean 패키지를 생성한다
@Slf4j => log.info() 사용 가능
@SpringBootTest => @Test가 붙은 함수만 디버깅됨
package com.koreait.board.bean;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import com.koreait.board.util.MyUtil;
import lombok.extern.slf4j.Slf4j;
@SpringBootTest
@Slf4j
public class DependencyTest {
@Test
public void testDependency() {
log.info(MyUtil.BLUE + MyUtil.BOLD + "Test Start" + MyUtil.END);
}
public void testDummy() {
log.info("Dummy Test");
}
}
package com.koreait.board.bean;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import com.koreait.board.util.MyUtil;
import lombok.extern.slf4j.Slf4j;
@SpringBootTest
@Slf4j
public class DependencyTest {
public ClassRoom cr;
@BeforeAll //모든 테스트 수행 전 한 번만 수행할 일
public static void Init() {
log.info("Init for Test");
}
@BeforeEach //모든 테스트 메서드마다 수행 전
public void Init2() {
log.info("Init2 for Test");
}
@Test
public void testDependency() {
log.info(MyUtil.BLUE + MyUtil.BOLD + "Test Start" + MyUtil.END);
log.info("ClassRoom : " + cr);
}
public void testDummy() {
log.info("Dummy Test");
}
}
@Component
객체 자동생성
@Autowired
자동 생성 연결
Chair.java
package com.koreait.board.bean;
import org.springframework.stereotype.Component;
import lombok.Data;
@Component
@Data
public class Chair {
private String name;
private String numofLegs;
public Chair()
{
this.name = "chair";
this.numofLegs = "4";
}
}
Desk.java
package com.koreait.board.bean;
import org.springframework.stereotype.Component;
import lombok.Data;
@Component
@Data
public class Desk {
private String name;
private String material;
public Desk()
{
this.name = "IKEA";
this.material = "Wood";
}
}
ClassRoom.java
package com.koreait.board.bean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.koreait.board.util.MyUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@Component //객체 자동생성
@Data
@Slf4j
public class ClassRoom {
private int no;
@Autowired
private Desk desk1;
@Autowired
private Desk desk2;
@Autowired
private Chair chair1;
@Autowired
private Chair chair2;
public ClassRoom() {
this.no = 1;
log.info(MyUtil.BLUE + "NEW Class Room Open!!" + MyUtil.END);
}
}