스프링 객체 주입

     

    스프링 객체

    • Controller, Service, Dao
      • Controller - @Controller
      • Service - @Service, @Component
      • Dao - @Repository, @Component
    • 스프링 객체는 Spring StereoType으로 등록이 가능하다.

     

     

    의존 객체 주입

    • @Autowired
      • 주입하려고하는 객체의 데이터 타입을 보고 의존 객체 주입
      • 타입 → 이름
      • 생성자 / 필드 / setter 레벨에 작성 가능
      • 스프링 자체 주석
      • required 속성 지원
        • @Autowired(required = false) / 기본값 @Autowired(required = true)
        • 필드 / setter 레벨 작성 가능
        • 의존성을 Optional로 설정
        • 의존 객체를 주입받지 못하도 객체를 생성할 수 있다.

     

    1. 특정 Bean 객체를 강제로 지정해주는 어노테이션만 @Qualifier를 사용

    @Autowired
    @Qualifier("sqlSessionFactory")
    private SqlSessionFactory sqlFactory;
     

    2. 만약 Bean 객체가 없을 경우 발생하는 예외를 피하고 싶다면 required 속성값을 false로 해준다.

    @Autowired(required=false)
    @Qualifier("^__^")
    private SqlSessionFactory sqlFactory;
     

     

    • @Resource
      • 주입하려고 하는 객체의 이름을 보고 의존 객체 주입
      • 이름 → 타입
      • 필드 / setter 레벨에 작성 가능
      • 자바 주석 - 특정 프레임워크에 종속 X
      • 자바 9 이후로 삭제
    @Resource
    private SqlSessionFactory sqlFactory;
     
    @Resource(name="sqlSessionFactory")
    private SqlSessionFactory sqlFactory;
     

     

     

     

    • @Inject
      • 생성자 / 필드 / setter 레벨에 작성 가능
      • 타입 → 이름
      • 자바 주석 - 특정 프레임워크에 종속 X

     

    1. 하나의 필드에 적용할 때

    @Inject	
    @Named("sqlSessionFactory")
    private SqlSessionFactory sqlFactory;
     

    2. setter나 생성자의 파라미터에서 여러 개의 Bean 객체를 주입해준다면 아래와 같이 파라미터 앞에 위치시켜 지정할 수 있다.

    @Inject	
    private @Named("sqlSessionFactory") SqlSessionFactory sqlFactory;
     

     

     

     

     

    @Autowired
    @Resource
    @Inject
    Package
    org.springframework.beans.factory.annotation.Autowired
    javax.annotation.Resource
    javax.inject.Inject
    Target
    Field, Setter Method, Constructor
    Field, Setter Method
    Field, Setter Method, Constructor
    의존성 주입 순서
    타입 → 이름
    이름 → 타입
    타입 → 이름
    빈 지정 방법
    1. @Qualifier("빈 이름")
    2. @Primary 사용
    @Resource(name="빈 이름”)
    1. @Qualifier("빈 이름")
    2. @Primary 사용
    3. @Named(value="빈 이름")
    Nullable
    required=false 속성 사용
    X
    X
    비고
    SpringFramwork 안에서만 사용 가능
    Java 9 이후로 삭제
    특정 프레임워크에 종속적이지 않음

     

     

     

    '공부 > Spring' 카테고리의 다른 글

    Redis  (0) 2023.06.24
    스프링 패키지 구조  (0) 2023.06.22
    DAO, DTO, VO, Entity  (0) 2023.01.27
    Session  (0) 2023.01.16
    Spring의 대표적인 Annotation의 역할  (0) 2023.01.10

    댓글