最近 接觸一個電商系統後臺,須要瞭解支付模塊的開發時候,發現了這樣一段有趣的代碼java
@Inject private List<PaymentPlugin> paymentPlugins = new ArrayList<>(); @Override public List<PaymentPlugin> getPaymentPlugins() { Collections.sort(paymentPlugins); return paymentPlugins; }
業務層getPaymentPlugins()方法中沒有任何查詢.可是 paymentPlugins居然有值,spring
public abstract class PaymentPlugin implements Comparable<PaymentPlugin> {
查詢了系統各個配置以及SQL語句 沒有相關的配置啊ide
在多方google 百度下,瞭解了google
原來是spring @Inject 註解能夠注入抽象類 或者接口的子類的集合code
子類配置:接口
@Component("alipayPagePaymentPlugin") public class AlipayPagePaymentPlugin extends PaymentPlugin {
很佩服這種思惟.ip