ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [spring]의존 자동 주입 어노테이션
    SPRING 2021. 8. 20. 12:09

     

     

    @Component로 등록한 빈의 자동 주입은 @Autowired , @Qualifier , @Resource를 사용한다.

     

     

    1. @Autowired는 같은 타입의 객체를 찾아서 자동으로 할당한다. 찾는 순서는 이름 → 타입 → Qualifier → fail 이다. (객체 의존성을 가질 때, 쉽게 의존성 주입을 받을 수 있다.) spring container는 @Autowired를 확인하면 같은 타입의 객체가 메모리에 존재하는지 확인하고, 객체를 변수에 주입한다. 필드, 생성자, Setter에 사용 가능하다. (만약 메모리가 없다면 NoSuchBeanDefinitionException을 발생시킨다)

     

     

    2. @Qualifier 는 의존성 주입 대상이 되는 타입의 객체가 두개 이상일 때 오류가 발생하지 않도록 @Autowired 아래에서 이름이나 아이디를 지정하여 사용한다. 

    xml

    <bean id="computer1" class="com.worri.dao">
    	<qualifier value="user1">
    </bean>
    <bean id="computer2" class="com.worri.dao"/>
    <bean id="computer3" class="com.worri.dao"/>

    java

    public class ComputerServiceUse{
    	@Autowired
        @Qualifier("user1")
        private Computer computer;
        
        public ComputerServiceUse(){}
    }

     

    xml에서 통일한 타입의 bean 객체가 여러개 있을 경우 우선적으로 사용할 bean 객체 태그에 qualifier 태그를 설정한다. java에서 @Autowired와 @Qualifier를 함께 사용해서 qualifier태그의 value값과 동일한 값을 @Qualifier에 넣어준다. 우선적으로 computer1이 주입된다.

     

     

     

    3. @Injection 는 @Autowired와 동일하게 작동하지만 같은 객체의 객체를 찾는 순서가 다르다. 타입 → Qualifier → 이름 → fail 이다. (하지만 Autowird 와 Qualifier 를 사용하는 것이 더 좋다고 한다.) 생성자, 필드, 메서드 모두 사용 가능하다.

     

    -사용하기 위해  javax.annotation-api 의존성을 추가한다.

    xml

    <dependency>
    	<groupId>javax.inject</groupId>
        <artifactId>java.inject</artifactId>
        <version>1</version>
    </dependency>

     

     

     

    4. @Resource 는 @Autowired 와 @Qualifier를 결합한 어노테이션이다. 주입하려고 하는 객체의 id와 일치하는 객체를 자동으로 주입한다. 생성자에는 적용할 수 없고 필드나 메서드(Setter)에 가능하다.

     

    -혹시 오류가 난다면 javax.annotation-api 의존성을 추가한다.

    xml

    <dependency>
    	<groupId>javax.annotation</groupId>
        <artifactId>javax.annotation-api</artifactId>
        <version>1.3.2</version>
    </dependency>

     


    @Componenet 만으로는 클래스 객체를 생성하였을 때 어떤 클래스가 어떤 역할을 수행하는지 알 수 없다. 분류를 위해 @Componenet를 상속한 어노테이션이 있다.

    1. @Service : 비지니스 로직을 처리하는 service 클래스

    2. @Repository : DB연동 처리하는 DAO 클래스(DB연동 과정에서 발생하는 예외를 변환해주는 특별한 기능 추가)

    3. @Controller : 사용자 요청 제어하는 Controller 클래스(해당 객체를 MVC 아키텍처에서 컨트롤러 객체로 인식하도록 함

     

    728x90

    'SPRING' 카테고리의 다른 글

    [SPRING] 데이터 추가, 변경, 삭제  (0) 2021.08.24
    [SPRING] Spring 의존성  (0) 2021.08.21
    [SPRING] Spring Container  (0) 2021.08.21
    [spring] 20AUG21 @Autowired @Service @Repository  (0) 2021.08.20
    [Spring] Collection  (0) 2021.08.19
Designed by Tistory.