spring注入一個實體bean的集合並指定順序
本文向一個bean中注入一個介面實體bean的集合,並指定各個實體bean在集合中的順序,然後在被注入bean中按順序呼叫集合中的bean實體中的方法。核心實現時在實體類上使用@Order註解來定製各個bean被注入的順序實現。
1、定義實體類方法介面
如下demo定義了一個介面類,其中有一個doHandler的方法。
package api.landsem.iot.v1.handler.impl.rpc;
public interface IRpcStatusHandler {
/**
* @Title: doHandler
* @Description: Handler method for status update.
* @param data
* @param sign
*/
void doHandler(String status,String sign);
}
2、新增介面實現
如下為三個介面的實現類,注意在實現類上使用@Order註解來指定該實體bean被載入的順序,註解中的值越小越優先被載入注入。
package api.landsem.iot.v1.handler.impl.status;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import api.landsem.iot.v1.handler.IIotDeviceHandler;
import api.landsem.iot.v1.handler.IIotDeviceHandler.IOTDeviceStatus;
import api.landsem.iot.v1.handler.IIotDeviceHandler.IOTDeviceStatus.Status;
import api.landsem.iot.v1.handler.impl.rpc.IRpcStatusHandler;
/**
* Update device status on device login.
*
*/
@Component
@Order(1)
public class StatusUpdateHandler implements IRpcStatusHandler{
private static final Logger logger = Logger
.getLogger(StatusUpdateHandler.class);
@Autowired
private IIotDeviceHandler mIotDeviceHandler;
@Override
public void doHandler(String status, String sign) {
logger.info("Call status update handler.");
}
}
package api.landsem.iot.v1.handler.impl.status;
import org.apache.log4j.Logger;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import api.landsem.iot.v1.handler.impl.rpc.IRpcStatusHandler;
/**
* Send off line configuration message on device login.
*
*/
@Component
@Order(2)
public class SendOfflineConfigHanler implements IRpcStatusHandler{
private static final Logger logger = Logger
.getLogger(SendOfflineConfigHanler.class);
@Override
public void doHandler(String status, String sign) {
logger.info("Call send offline configuration handler.");
}
}
package api.landsem.iot.v1.handler.impl.status;
import org.apache.log4j.Logger;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import api.landsem.iot.v1.handler.impl.rpc.IRpcStatusHandler;
/**
* Send off line navigation message on device login.
*/
@Component
@Order(3)
public class SendOfflineNavigationHandler implements IRpcStatusHandler{
private static final Logger logger = Logger
.getLogger(SendOfflineNavigationHandler.class);
@Override
public void doHandler(String status, String sign) {
logger.info("Call send offline navigation handler.");
}
}
3、使用
(1)、直接注入到集合
在需要使用的bean中,直接建立一個IRpcStatusHandler介面的集合,然後使用@Autowired註解即可,程式啟動後會自動將實現了該介面的bean按照Order註解的順序注入到集合中。
@Autowired
public List<IRpcStatusHandler> mRpcStatusHandlers;
(2)、建立一個單獨的集合bean
建立一個集合屬性,然後使用@Autowired注入實現的bean,之後再將該集合屬性作為一個bean返回並未bean指定名字。在其他bean中使用@Autowired注入時使@Qualifier註解指定bean的名字,實現載入集合bean。如下為java中的bean配置程式碼:
package api.landsem.iot.v1.handler.impl.rpc.configuration;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import api.landsem.iot.v1.handler.impl.rpc.IRpcMessageHandler;
import api.landsem.iot.v1.handler.impl.rpc.IRpcStatusHandler;
@Configuration
@ComponentScan("api.landsem.iot.v1.handler.impl.status")
public class RpcConfiguration {
@Autowired
private List<IRpcStatusHandler> mRpcStatusHandlers;
/**
* @Title: getRpcStatusHandlers
* @Description: RPC status update hander bean list.
* @return
*/
@Bean(name="rpcStatusUpdateHandlers")
public List<IRpcStatusHandler> getRpcStatusHandlers() {
return this.mRpcStatusHandlers;
}
}
如下為在其他bean中使用集合bean物件的方法:
@Autowired
@Qualifier(value = "rpcStatusUpdateHandlers")
public List<IRpcStatusHandler> mRpcStatusHandlers;
相關文章
- springboot~AutoConfigureAfter如何控制Bean的注入順序Spring BootBean
- Spring如何控制Bean的載入順序SpringBean
- spring中如何向一個單例bean中注入非單例beanSpring單例Bean
- 關於Spring的bean注入SpringBean
- spring註解開發(一)Bean注入SpringBean
- Spring注入Bean的幾種方式SpringBean
- 扒一扒Bean注入到Spring的那些姿勢BeanSpring
- spring注入bean的幾種策略模式SpringBean模式
- Spring中bean的四種注入方式SpringBean
- Spring裝配Bean(七) Spring的執行時注入SpringBean
- Spring Aop的執行順序Spring
- MySQL按指定順序排序(order by field的使用)MySql排序
- MySQL 按指定 ID 順序返回結果MySql
- Mysql按指定 ID 順序返回結果MySql
- 進行List集合去重操作,分為保持原List集合元素順序和不保持原順序
- 記一個TS 列舉順序的坑
- Spring注入Bean的四種方式,看這一篇就夠了SpringBean
- linux 中實現資料按照指定行號順序輸出Linux
- Spring 原始碼分析之 bean 依賴注入原理(注入屬性)Spring原始碼Bean依賴注入
- 順序表的實現
- 使用者行為分析,指定操作順序
- 欄位按照指定 ID 順序進行排序排序
- 如何實現一個簡易版的 Spring - 如何實現 Setter 注入Spring
- 多個module實體類集合打一個jar包並上傳至遠端庫JAR
- Spring中給靜態欄位(field)注入beanSpringBean
- Spring注入bean報錯 Error creating bean with name的網上找不到的解決方案SpringBeanError
- 如何正確控制springboot中bean的載入順序總結Spring BootBean
- spring應用手冊-IOC(XML配置實現)-(26)-注入set集合SpringXML
- 順序棧的實現方式
- Spring Bean 的一生SpringBean
- 省掉bean自定義spring mvc註解注入json值BeanSpringMVCJSON
- python pandasDataframe按指定index名或columns名(行名或列名)順序修改輸出內容的排列順序PythonIndex
- 同一個元素中有多個class,優先順序
- 測試平臺-unittest 指定順序執行用例
- go fiber: 多個全域性中介軟體的執行順序Go
- Spring Security(二)--WebSecurityConfigurer配置以及filter順序SpringWebFilter
- 0原始碼基礎學習Spring原始碼系列(一)——Bean注入流程原始碼SpringBean
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- MySQL 並列排名和順序排名查詢MySql