spring注入一个实体bean的集合并指定顺序
来源:互联网 发布:异次元软件 编辑:程序博客网 时间:2024/06/05 20:44
本文向一个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);@Autowiredprivate IIotDeviceHandler mIotDeviceHandler;@Overridepublic 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);@Overridepublic 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);@Overridepublic 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;
0 0
- spring注入一个实体bean的集合并指定顺序
- Spring bean 集合注入
- Springboot filter 拦截指定的路径(注入spring Bean方式)
- 详解Java的Spring框架中bean的注入集合
- Spring中Bean属性为集合的注入方式
- Spring集合类型的bean及其注入方法
- Spring的bean注入
- 【Spring】 Bean的注入
- Spring学习笔记 创建自动扫描并注入的bean
- Spring入门之bean属性注入集合
- 一个Spring Bean配置文件注入时的异常:TypeMismatchException
- Spring的集合注入
- Spring集合的注入
- Spring的bean注入方式
- spring bean注入的方式
- Spring中bean的注入
- spring(基础六) spring中Bean属性为集合的注入方式
- Spring的bean创建顺序
- JavaScript学习-DOM操作技术
- android5.1 以太网启动已经修改为静态IP
- 论微服务安全:保护微服务的两大方案
- 【编程素质】软件质量
- Airflow学习笔记 --- airflow安装
- spring注入一个实体bean的集合并指定顺序
- codeforces 798C Mike and gcd problem
- Angular JS 指令 & $scope 2 <连载> 新手必看
- pyqt4原始例程--提示_再次确认_关闭_图标_居中
- MySQL自动分区脚本
- HTTPS那些事(一)HTTPS原理
- pysctp中出现的IOError: [Errno 11] Resource temporarily unavailable以及无限重复接收的问题
- 【学习笔记】面向对象基础1
- LibSVM学习详细说明