一、前言
通過實現springframework的spring-core源碼包中org.springframework.core.annotation.Order加載排序接口,從而可以實現對於在SpringContext上下文bean對象加載初始化順序,可以通過簡單調整排序號實現類複雜業務邏輯優化調整調配等。
二、代碼示例
1. 配置項目spring環境(可以下載參見springhelloworld完整項目及依賴包)
2. 模擬實現三個不同加載順序類:Order1>Order2>Order3(從大到小依賴加載:ORDERED分別設置爲:1、2、3)
package com.order;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
//使用order屬性,設置該類在spring容器中的加載順序
@Order(1)
public class Order1 {
private final int ORDERED = 1;
public Order1(){
System.out.println(this);
}
@Override
public String toString() {
return "Order1 is loaded @ORDERED=" + ORDERED + "]";
}
}
package com.order;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
//使用order屬性,設置該類在spring容器中的加載順序
@Order(2)
public class Order2 {
private final int ORDERED = 2;
public Order2(){
System.out.println(this);
}
@Override
public String toString() {
return "Order2 is loaded @ORDERED=" + ORDERED + "]";
}
}
package com.order;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
//使用order屬性,設置該類在spring容器中的加載順序
@Order(3)
public class Order3 {
private final int ORDERED = 3;
public Order3(){
System.out.println(this);
}
@Override
public String toString() {
return "Order3 is loaded @ORDERED=" + ORDERED + "]";
}
}
<?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.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<context:annotation-config />
<context:component-scan base-package="com"></context:component-scan>
</beans>
package com;
import org.junit.Test;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
@ContextConfiguration(locations={"classpath*:junitSpringContext.xml"})
public class TestBase extends AbstractJUnit4SpringContextTests {
@Test
public void testBean() {
}
}
3. 運行junit測試類
控制檯打印結果
Order1 is loaded @ORDERED=1]
20:43:51.024 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'order2'
Order2 is loaded @ORDERED=2]
20:43:51.025 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'order3'
Order3 is loaded @ORDERED=3]
感謝:
http://www.xwood.net/_site_domain_/_root/5870/5874/t_c279539.html