spring注入一个实体bean的集合并指定顺序

这篇博客介绍了如何在Spring中向一个Bean注入实现了特定接口的实体Bean集合,并通过@Order注解指定它们的顺序。首先定义了接口和其实现类,接着展示了如何直接注入集合和创建单独的集合Bean,确保在使用时能按指定顺序调用接口方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文向一个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;



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值