4.1 의존성 주입과 스프링

의존성 주입(dependency injection)

  • 스프링 프레임워크는 자체적으로 객체를 생성하고 관리하면서 필요한 곳으로 객체를 주입(inject)하는 역할을 한다.
  • @Autowired 어노테이션으로 의존성 주입
// 해당 타입(SampleService)의 빈(Bean)이 존재하면 여기에 주입
@Autowired private SampleService sampleService;

ApplicationContext 와 빈(Bean)

  • 스프링의 빈 설정은 XML을 이요하거나 별도의 클래스를 이용하는 자바 설정이 가능하다.
  • 빈(Bean) 객체들을 관리하기 위해서 ApplicationContext 존재(객체(공간))을 활용

  • 해당 패키지를 스캔해서 스프링의 어노테이션들을 인식한다
  • @Controller, @Service, @Repository, @Component ..

생성자 주입방식

  • 초기 스프링에서는 @AutoWried 를 멤버 변수에 할당하거나, Setter를 작성하는 방식을 많이 이용했지만, 스프링3 이후에는 생성자 주입방식을 많이 사용
  • 생성자 주입방식
    • 주입 받아야 하는 객체의 변수는 final로 작성한다
    • 생성자를 이용해서 해당 변수를 생정자의 파라미터로 지정한다.
    • 객체를 생성할 때 문제가 발생하는지를 미리 확인할 수 있어 선호되는 방식
    • Lombok@RequiredArgsConstructor를 이용해 필요한 생성자 함수를 자동 작성 가능

웹 프로젝트를 위한 스프링 준비

  • ApplicationContext가 웹 애플리케이션에서 동작하려면 웹 애플리케이션이 실행될 때 스프링을 로딩해서 해당 웹 애플리케이션 내부에 스프링의 ApplicationContext를 생성하는 작업이 필요하다.
  • 이를 위해 web.xml을 이용해서 리스너를 설정한다.
  • 스프링 프레임워크의 웹과 관련된 작업은 spring-webmvc 라이브러리르 추가해야 설정 가능하다.

4.2 MyBatis와 스프링 연동

  • 다음과 같은 라이브러리들이 필요하다.
    • 스프링관련 : spring-jdbc, spring-tx
    • MyBatis관련 : mybatis, mybatis-spring
  • 스프링에 설정해둔 HikariDataSource를 이용해서 SqlSessionFactory라는 빈(Bean)을 설정

XML로 SQL분리하기

  • 매퍼 인터페이스를 정의하고 메소드를 선언
  • 해당 XML 파일을 작성(파일 이름과 인터페이스 이름을 같게)하고 <select>와 같은 태그를 이용
  • <select>, <insert> 등의 태그에 id 속성 값을 매퍼 인터페이스의 메소드 이름과 같게 작성
  • root-context.xml에 있는 MyBatis 설정에 XML 파일들을 인식하도록 설정 추가