Spring DI 활용하기 - 2

이규훈·2022년 11월 13일
0

스프링 정리

목록 보기
19/30

IoC와 DI

(제어의 역전)IoC - 제어의 흐름을 전통적인 방식과 다르게 뒤바꾸는 것
Inversion of Control 여기서 control은 if, for문 이다.-> 실행흐름이 바뀌는 것

전통적인 방식
사용자 코드가 Framework 코드를 호출
Car car = new Car();
car. turboDrive() 하면
turboDrive()호출

IoC
FrameWork 코드가 사용자 코드를 호출
engine.start()이 -> car.drive(new SuperEngine()); 호출

다른 사람이 만든 코드를 우리가 호출하는 방식이 되는 것이다. -> 변하지않는 코드와 변하는 코드의 분리가 가능해진다.

의존성 주입 DI - 사용할 객체를 외부에서 주입받는 것

@Autowired

인스턴스 변수(iv), setter, 참조형 매개변수를가 진 생성자, 메서드에 적용
생성자에는 생략이 가능하다.
생략하면 Bean을 생성할때 이 생성자를 이용해서 생성하고 생성자의 참조 매개변수의 타입을 찾아서 넣어준다.
But 생성자가 여러개이면 @Autowired 붙여주는게 좋다.

Spring container에서 타입으로 빈을 검색해서 참조 변수에 자동 주입(DI)
검색된 빈이 n개이면, 그 중에 참조변수와 이름이 일치하는 것을 주입한다.

주입 대상이 변수일 때 ,검색된 빈이 1개 아니면 예외 발생
주입 대상이 배열일때, 검색된 빈이 n개라도 예외 발생 X

@Aotowired(required = false)일 때, 주입할 빈을 못 찾아도 예외 발생X.

@Resource

Spring container에서 이름으로 빈을 검색해서 참조 변수에 자동 주입(DI)
일치하는 이름의 빈이 없으면, 예외 발생

//@Resource(name = "engine")
//둘이 같은 뜻
@Resource
Engine engine;
//engine이 자동으로 이름이 된다. 

@Conponent

<component-scan>로 @Component가 클래스를 자동 검색해서 빈으로 등록
@Controller, @Service, @Repository, @ControllerAdvice의 메타 애너테이션

<context:component-scan base-package="com.fastcampus.ch3">

이렇게 있으면 하위의 서브패키지까지 검색한다.

@Component
@PropertySource("setting.properties")
class SysInfo{
    String timeZone;
    String currDir;
    String autosaveDir;
    int autosaveInerval;
    boolean autosave;
}

이런 코드가 있고 setting.properties이라는 파일의 내용이

autosaveDir=/autosave
autosave=true
autoInterval = 30

이렇다면 각각의 값들이 안에다 대입이 된다.

@Value

값 지정할때
systemPronperties값이나 systemEnvironment의 값을 가져와 주입이 가능하다.

profile
개발취준생

0개의 댓글

관련 채용 정보