ㅡ. Spring 이란?

Application을 자바로 개발하는데 유용하고 편리한 기능을 제공하는 프레임워크 

 

ㅡ. IoC 

의존 관계 주입 이라고 합니다. 의존 객체를 만들어서 쓰는것이 아니라, 생성자 만들어서 주입받아서 사용합니다.

사용하는 이유는 컨테이너 안에 빈들이 존재하는데 이것들을 사용한다고 생각하시면 될것 같습니다. Spring 초기에는 XML 작성되었지만, 지금은  annotation 기반의 dependency injection을 제공하게 됩니다. 최상위 root 클래스 BeanFactory이 존재합니다. 

bean 설정 파일이 있어야 한다. (xml)

 

History.

1.

<bean id="service" class="service.path" scope=""(default. singleton) autowire="default">

      <property name="repository" ref="repository" /> *ref:다른 bean을 참조해야 합니다.(다른 bean의 id가 와야 합니다.)

=> service는 repository와 의존성 관계가 있습니다.

 

2.

<context:component-scan base-package=" "> 이하 package들을 bean, @annotation을 스캔해줍니다. 

 

3.

Java 설정 파일 

@Configuration

public class ApplcationConf{
      @Bean

      public Repository repository(){

            return ...

     }

}

의존성 주입을 직접할 수 있습니다. @Bean들을 읽어옵니다. 문제는 일일이 Bean을 등록하는것이었다. 

의존성 주입을 직접 하지 않고 @Autowired 를 쓸 수도 있습니다. 

 

4.

@ComponentScan(basePackages = "~.class") class가 위치한 곳부터 component-scan을 수행하라 는 의미하라 입니다. 

ApplicatoinContext 만드는것도 Spring이 직접 해줍니다. class가 위치한 곳부터 component scanning을 해서 annotation 붙어있는 클래스 찾아서 bean으로 등록하는 것입니다. 

 

 

ㅡ. @Autowired

주입할 수 있습니다.  생성자 주입과 setter 주입이 있습니다. 

optional 일 경우에는 @Autowired(required = false) 하면 됩니다. 

필드에도 붙일 수 있습니다. 

setter나 필드 injection을 사용하는 경우에는 optional로 설정해서 해당하는 의존성 없이도 bean으로 등록되게끔 진행할 수 있습니다. 

의존성이 하나 일 경우, 의존성이 여러개일 경우

 

 

ㅡ. @SpringBootApplicatoin

bean들을 설정합니다. @ComponentScan 과 @Configuration 이 포함되어 있습니다. 

 

ㅡ.Bean

IoC 컨테이너가 관리하는 것, 의존성 주입을 받는것

라이프사이클 인터페이스를 지원합니다. 부가적인 작업을 수행할 수 있습니다. 이밖에도 스코프 라는 개념이 있다. 

 

ㅡ. Issue

의존성에 따라 단위 테스트가 어려워진다. @Mock으로 가짜 객체를 만들어서 의존성 주입을 시도할 수도 있다. (Spring 장점)

 

ㅡ. Spring Boot 

의존성 관리를 따로 하지 않아도 된다. web-starter 만 dependency 만 넣어주면 API 를 설계하고 구축하는데 필요한 Module들을 자동으로 넣을 수 있다.