#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가 우선순위가 높아 먼저 출력될 것이다.
댓글 없음:
댓글 쓰기