Component scan, annotation-config

0

Spring

목록 보기
13/23
  • .xml 에 <context:annotation-config> : 어노테이션 활성화

  • .xml에 정의하지 않아도 자동(Autowired)으로 ProductDAO를 찾아서 constructor-arg을 자동주입 해주겠다.

  • @Autowired시에 여러객체가 존재한다면 @Qualify("")로 이름을(한가지) 정해줘야함

  • <context:component-scan base-package="com.my.product.dao"/> 해당 패키지를 스캔하면서 특정 조건을 만족하는 애들은 스프링 빈으로 자동 등록함.

    • 특정 조건 = @Component, @Repository, @Service, @Controller, @RestController, @ControllAdvice and @Configuration
    • <context:component-scan> 태그도 걸고, 클래스에도 어노테이션 붙여야함
  • @Component로 상속받는 애들이 @Service, @Controller, @Repository (하위 어노테이션)

  • 일반클래스를 컨테이너로 관리하고 싶다면 @Component

  • 서비스 레이어용을 스프링 컨테이너로 관리 : @Service

  • DB와 일하는 (주로 dao) 클래스 = @Repository


Spring Application Context

  • ProductDAOOracle 은 productDAO를 구현한것이고, db와 직접적으로 연결됨
  • CustomerDAAOracle 은 db와 직접 일하지 않고 mybatis와 일함 (sqlSessionFactory -> DataSourceHikari를 사용 -> hikariConfig를 사용)
  • hikariConfig에는 커넥션 객체 3개를 만들기로 했었음(minimumIdle)
  • sqlSessionFactory은 mybatis를 처리해야하므로 외부에 config.xml파일 & mapper파일들이 있음(컨테이너와 별개) (sqlSessionFactory은 config.xml을 사용하고 -> mapper파일을 사용)
  • config.xml에서도 dataSource를 사용.
    -> 스프링컨테이너와 일하면 config.xml에 environment가 필요가 없다. (효과없음)
  • sqlSessionSql이 스프링컨테이너 안쪽에 있으면 연결해놓은 데이터소스(1번)이 우선
  • session.close() 란, connection pool안에 들어가서 쉬는 것 / db와의 연결을 끊는것이 아님! -> 유휴 connection으로 돌아간다.
  • 스프링내부에서 mybatis를 쓰면 auto-commit이 된다. -> commit & rollback 불가능!

Annotation

  • @Configuration , @Bean : 설정과 관련
  • @Component, @Service, @Controller, @Repository : Component scan을 위함
  • @Autowired, @Qualifier: 자동주입
  • annotaion을 쓰기 위해선 설정이 필요하다.
    <context:annotation-config> -> <context:component-scan>이 포함하고 있음. 컴포넌트 스캔을 써주면 annotaion-config를 굳이 사용하지 않아도 됨.
profile
백엔드를 공부하고 있습니다.

0개의 댓글