@order 指定初始化加載順序,注入接口的List集合,按順序排列初始化的bean


Spring 2.0后,Spring提供@Order注解來定義了組件的加載順序

一、加載順序源碼

public interface Ordered {
    int HIGHEST_PRECEDENCE = -2147483648;
    int LOWEST_PRECEDENCE = 2147483647;

    int getOrder();
}

 

二、測試

包結構:

 

OrderTest接口
public interface OrderTest {
}

實現類

@Order(0)
@Service
public class OrderTest0 implements OrderTest {

    private int order = 0;

    public OrderTest0() {
        System.out.println("order = " + order);
    }
}

.

@Order(5)
@Service
public class OrderTest5 implements OrderTest {

    private int order = 5;

    public OrderTest5() {
        System.out.println("order = " + order);
    }
}

.

@Order(-1)
@Service
public class OrderTest_1 implements OrderTest {

    private int order = -1;

    public OrderTest_1() {
        System.out.println("order = " + order);
    }
}

 .

@Order(-7)
@Service
public class OrderTest_7 implements OrderTest {

    private int order = -7;

    public OrderTest_7() {
        System.out.println("order = " + order);
    }
}

 

測試類

import cc.ash.mvc.service.order.OrderTest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class InitOrderTest {

    /**
     * Qualifier 注解,指定注入哪一個實現類 */
    @Autowired
    @Qualifier("orderTest0")
    private OrderTest orderTest;

    /**
     * 接口集合的方式注入。元素順序為order指定的加載順序 */
    @Autowired
    private List<OrderTest> orderTests;

    @Test
    public void initOrderTest() {
        OrderTest orderTest = orderTests.get(1);
        System.out.println("orderTest = " + orderTest);
    }
}

 .

控制台輸出

.

 

...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM