2016년 11월 11일 금요일

[자바강의,스프링/SpringBoot,Framework강의추천_탑크리에듀]#9.스프링어노테이션-@Order사용예제

#9.스프링어노테이션-@Order사용예제 
Spring4에서 새로 소개된 @Order 어노테이션은 같은 타입의 빈이 컬렉션(List) Autowired 될 때 그 순서를 지정한다.(낮은 숫자가 우선순위가 높다) 
먼저 @Order를 사용하지 않은 예제를 작성해 보자.(스프링 버전은 4이상으로)

[Emp.java]
package ojc;
public interface Emp {
      public void work();
}

[Programmer.java]
package ojc;
import org.springframework.stereotype.Service;
@Service
public class Programmer implements Emp {
      public void work() {
            System.out.println("Programmer Working...");
      }
}

[Designer.java]
package ojc;
import org.springframework.stereotype.Service;
@Service
public class Designer implements Emp {
      public void work() {
            System.out.println("Designer Working...");
      }
}

[OrderTest.java]
@Service
public class OrderTest {
      @Autowired
      List<Emp> emps;  
      public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("order.xml");
            OrderTest test = (OrderTest) context.getBean("orderTest");
           
            for(Emp e : test.emps) {
                  e.work();
            }
      }
}

[/src/main/resources/order.xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
      <context:component-scan base-package="ojc"/>
</beans>


OrderTest를 실행하면 다음과 같이 결과가 나타난다.(Designer List에 먼저 주입됨)

[실행 결과]
Designer Working...
Programmer Working...

그러나 emps 리스트에 주입되는 빈에 순서가 정의되지 않는다이때 주입되는 순서를 주기 위해 @Order를 사용하면 된다.물론 XML설정을 이용하여 Programmer, Designer를 빈으로 등록해 놓고 List<Emp> emps setter를 이용하여 Collection형태로 빈을 주입한다면 기술된 빈의 순서대로 List에 들어가게 된다.  앞 예제를 수정해 보자.

[Designer.java]
@Service
@Order(value=2)
public class Designer implements Emp {   }

[Programmer.java]
@Service
@Order(value=1)
public class Programmer implements Emp { … }

이제는 Programmer가 우선순위가 높아 먼저 출력될 것이다.

댓글 없음:

댓글 쓰기