通過實現springframework的Order接口指定bean實例初始化加載順序的代碼示例

一、前言

通過實現springframeworkspring-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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章