스프링 프레임워크 Inversion of Control (IoC)

Back-End/Spring 2019. 6. 3. 23:39
728x90
반응형

spring-petclinic-master.zip



IoC (Inversion of Control)


의존성에 대한 컨트롤이 뒤바뀌는 것을 말한다.

원래 의존성은 자기자신이 가지고 있다.


 

  class OwnerController {

private OwnerRepository repository = new OwnerRepository( );

  }




의존성을 주입


  class OwnerControllerTest{

@Test

public void create( ) {

OwnerRepository repo = new OwnerRepository( );

OwnerController controller = new OwnerController(repo);

  }

  }



servlet의 제어권도 서블릿 자체가 아닌 서블릿 컨테이너가 가지고 있으므로 의존성 주입이라고도

볼 수 있다.



IoC 컨테이너 


자신이 컨테이너 내부에 만든 객체 - 빈(bean)을 만들고 엮어주며 제공해준다.

이러한 빈의 의존성을 관리한다.

코드 옆에 초록색 문양이 붙어있으면 빈(bean) 이다.


빈 설정

 * 이름 또는 ID

 * 타입

 * 스코프


IoC 컨테이너는 직접 쓸 일은 많지 않다.

애플리케이션 컨텍스트는 위 코드에 존재하지 않는다.


ApplicationContext는 빈들을 만들고 의존성을 엮어준다.

빈에다 주입을 해서 사용할 수도 있다.



 

  @RestController = REST 방식(특정한 URI는 반드시 그에 상응하는 데이터 자체라는 것을 의미) 의 데이터 자체를 서비스 하는것을 말한다.


  @Autowired = 스프링이 빈의 요구사항과 매칭되는 애플리케이션 컨텍스트상에서 다른 빈을 찾아 빈 간의 의존성을 

      자동으로 만족시키도록 하는 수단이다.


  @GetMapping = @RequestMapping(method = RequestMethod.GET)의 축양형으로써, 어노테이션만 보고 무슨 메소드 요청인지

   바로 알아볼 수 있다.





 

  @RestController

  public class SampleController {


@Autowired

ApplicationContext applicationContext;


@GetMapping("/context")

public String context( ) {

return "hello" + applicationContext.getBean(OwnerRepository.class);

  }

  }




빈 (Bean)


스프링 IoC 컨테이너가 관리하는 객체


등록하는 방법


 

  @Component


* @Repository

* @Service

* @Controller




또는 직접 일일이 XML이나 자바 설정 파일에 등록함


꺼내쓰는 방법

@Autowired 또는 @Inject

또는 ApplicationContext에서 getBean( )으로 직접 꺼내거나


특징

 "빈"들만 의존성 주입을 해준다.



의존성 주입 (Dependency Injection)


객체 자체가 아니라 Framework에 의해 객체의 의존성이 주입되는 설계 패턴

Framework에 의해 동적으로 주입되므로 여러 객체 간의 결합이 줄어든다.

Dependency Injection은 Spring Framework에서 지원하는 IoC의 형태


 

  @Autowired / @Inject를 붙이는 곳


* 생성자

* 필드

* Setter




728x90
반응형

'Back-End > Spring' 카테고리의 다른 글

AOP(Aspect Oriented Programming) - 인강  (0) 2019.06.05
스프링 프로젝트 구조  (0) 2019.06.04
스프링 프로젝트 살펴보기  (0) 2019.06.02
스프링 프레임워크 입문  (0) 2019.06.02
Spring를 이용한 회원정보관리  (0) 2019.05.31
: