修改循环注入的问题
This commit is contained in:
parent
85db6d4823
commit
a0eccffb45
|
|
@ -4,7 +4,6 @@ import com.tuoheng.machine.events.AirportEvent;
|
|||
import com.tuoheng.machine.platform.factory.PlatformStrategyFactory;
|
||||
import com.tuoheng.machine.platform.strategy.AirportPlatformStrategy;
|
||||
import com.tuoheng.machine.status.AirportState;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.statemachine.StateMachine;
|
||||
|
|
@ -21,11 +20,9 @@ import java.util.UUID;
|
|||
@Configuration
|
||||
public class AirportMachineConfig {
|
||||
|
||||
@Autowired
|
||||
private PlatformStrategyFactory platformStrategyFactory;
|
||||
|
||||
@Bean(name = "airportStateMachineFactory")
|
||||
public StateMachineFactory<AirportState, AirportEvent> stateMachineFactory() throws Exception {
|
||||
public StateMachineFactory<AirportState, AirportEvent> stateMachineFactory(
|
||||
PlatformStrategyFactory platformStrategyFactory) throws Exception {
|
||||
return new StateMachineFactory<AirportState, AirportEvent>() {
|
||||
@Override
|
||||
public StateMachine<AirportState, AirportEvent> getStateMachine() {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import com.tuoheng.machine.events.CoverEvent;
|
|||
import com.tuoheng.machine.platform.factory.PlatformStrategyFactory;
|
||||
import com.tuoheng.machine.platform.strategy.CoverPlatformStrategy;
|
||||
import com.tuoheng.machine.status.CoverState;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.statemachine.StateMachine;
|
||||
|
|
@ -21,11 +20,9 @@ import java.util.UUID;
|
|||
@Configuration
|
||||
public class CoverMachineConfig {
|
||||
|
||||
@Autowired
|
||||
private PlatformStrategyFactory platformStrategyFactory;
|
||||
|
||||
@Bean
|
||||
public StateMachineFactory<CoverState, CoverEvent> coverStateMachineFactory() throws Exception {
|
||||
public StateMachineFactory<CoverState, CoverEvent> coverStateMachineFactory(
|
||||
PlatformStrategyFactory platformStrategyFactory) throws Exception {
|
||||
return new StateMachineFactory<CoverState, CoverEvent>() {
|
||||
@Override
|
||||
public StateMachine<CoverState, CoverEvent> getStateMachine() {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import com.tuoheng.machine.events.DrcEvent;
|
|||
import com.tuoheng.machine.platform.factory.PlatformStrategyFactory;
|
||||
import com.tuoheng.machine.platform.strategy.DrcPlatformStrategy;
|
||||
import com.tuoheng.machine.status.DrcState;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.statemachine.StateMachine;
|
||||
|
|
@ -21,11 +20,9 @@ import java.util.UUID;
|
|||
@Configuration
|
||||
public class DrcMachineConfig {
|
||||
|
||||
@Autowired
|
||||
private PlatformStrategyFactory platformStrategyFactory;
|
||||
|
||||
@Bean(name = "drcStateMachineFactory")
|
||||
public StateMachineFactory<DrcState, DrcEvent> drcStateMachineFactory() throws Exception {
|
||||
public StateMachineFactory<DrcState, DrcEvent> drcStateMachineFactory(
|
||||
PlatformStrategyFactory platformStrategyFactory) throws Exception {
|
||||
return new StateMachineFactory<DrcState, DrcEvent>() {
|
||||
@Override
|
||||
public StateMachine<DrcState, DrcEvent> getStateMachine() {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import com.tuoheng.machine.events.DroneEvent;
|
|||
import com.tuoheng.machine.platform.factory.PlatformStrategyFactory;
|
||||
import com.tuoheng.machine.platform.strategy.DronePlatformStrategy;
|
||||
import com.tuoheng.machine.status.DroneState;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.statemachine.StateMachine;
|
||||
|
|
@ -21,11 +20,9 @@ import java.util.UUID;
|
|||
@Configuration
|
||||
public class DroneMachineConfig {
|
||||
|
||||
@Autowired
|
||||
private PlatformStrategyFactory platformStrategyFactory;
|
||||
|
||||
@Bean(name = "droneStateMachineFactory")
|
||||
public StateMachineFactory<DroneState, DroneEvent> droneStateMachineFactory() throws Exception {
|
||||
public StateMachineFactory<DroneState, DroneEvent> droneStateMachineFactory(
|
||||
PlatformStrategyFactory platformStrategyFactory) throws Exception {
|
||||
return new StateMachineFactory<DroneState, DroneEvent>() {
|
||||
@Override
|
||||
public StateMachine<DroneState, DroneEvent> getStateMachine() {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.tuoheng.machine.demo;
|
||||
|
||||
import com.tuoheng.machine.manager.AirportSystemManager;
|
||||
import com.tuoheng.machine.manager.factory.AirportSystemManagerFactory;
|
||||
import com.tuoheng.machine.platform.factory.PlatformStrategyFactory;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
|
||||
|
|
@ -20,6 +21,7 @@ public class MultiPlatformDemo {
|
|||
|
||||
// 获取必要的Bean
|
||||
PlatformStrategyFactory strategyFactory = context.getBean(PlatformStrategyFactory.class);
|
||||
AirportSystemManagerFactory managerFactory = context.getBean(AirportSystemManagerFactory.class);
|
||||
|
||||
|
||||
System.out.println("\n========== DJI 机巢系统演示开始 ==========\n");
|
||||
|
|
@ -32,7 +34,7 @@ public class MultiPlatformDemo {
|
|||
|
||||
System.out.println("1. DJI机巢上线: " + djiAirport);
|
||||
System.out.println(" 平台类型: " + strategyFactory.getPlatformType(djiAirport).getName());
|
||||
AirportSystemManager djiManager = strategyFactory.getSystemManager(djiAirport);
|
||||
AirportSystemManager djiManager = managerFactory.getManager(djiAirport);
|
||||
djiManager.airportOnline(djiAirport);
|
||||
System.out.println(" " + djiManager.getFullStatus(djiAirport));
|
||||
System.out.println();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
package com.tuoheng.machine.manager.factory;
|
||||
|
||||
import com.tuoheng.machine.manager.AirportSystemManager;
|
||||
import com.tuoheng.machine.platform.PlatformType;
|
||||
import com.tuoheng.machine.repository.AirportPlatformRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 机巢系统管理器工厂
|
||||
* 根据机巢SN从数据库查询平台类型,返回对应的系统管理器
|
||||
*/
|
||||
@Component
|
||||
public class AirportSystemManagerFactory {
|
||||
|
||||
@Autowired
|
||||
private AirportPlatformRepository airportPlatformRepository;
|
||||
|
||||
/**
|
||||
* 存储所有平台的系统管理器实现
|
||||
* Key: PlatformType
|
||||
* Value: AirportSystemManager实现
|
||||
*/
|
||||
private final Map<PlatformType, AirportSystemManager> managerMap = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 注册所有系统管理器
|
||||
* Spring会自动注入所有实现了AirportSystemManager的Bean
|
||||
*/
|
||||
@Autowired
|
||||
public void registerManagers(List<AirportSystemManager> managers) {
|
||||
for (AirportSystemManager manager : managers) {
|
||||
managerMap.put(manager.getPlatformType(), manager);
|
||||
System.out.println(String.format("注册系统管理器: %s -> %s",
|
||||
manager.getPlatformType().getName(), manager.getClass().getSimpleName()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据机巢SN获取对应的系统管理器
|
||||
*
|
||||
* @param airportSn 机巢序列号
|
||||
* @return 对应平台的AirportSystemManager实现
|
||||
* @throws IllegalArgumentException 如果机巢未注册或系统管理器不存在
|
||||
*/
|
||||
public AirportSystemManager getManager(String airportSn) {
|
||||
PlatformType platformType = airportPlatformRepository.getPlatformType(airportSn);
|
||||
|
||||
if (platformType == null) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("机巢未注册或平台类型未配置: %s", airportSn));
|
||||
}
|
||||
|
||||
AirportSystemManager manager = managerMap.get(platformType);
|
||||
|
||||
if (manager == null) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("未找到平台系统管理器: %s (机巢: %s)", platformType.getName(), airportSn));
|
||||
}
|
||||
|
||||
return manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据平台类型获取系统管理器
|
||||
*
|
||||
* @param platformType 平台类型
|
||||
* @return 对应平台的AirportSystemManager实现
|
||||
*/
|
||||
public AirportSystemManager getManagerByType(PlatformType platformType) {
|
||||
return managerMap.get(platformType);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
package com.tuoheng.machine.platform.factory;
|
||||
|
||||
import com.tuoheng.machine.manager.AirportSystemManager;
|
||||
import com.tuoheng.machine.platform.PlatformType;
|
||||
import com.tuoheng.machine.repository.AirportPlatformRepository;
|
||||
import com.tuoheng.machine.platform.strategy.AirportPlatformStrategy;
|
||||
|
|
@ -52,13 +51,6 @@ public class PlatformStrategyFactory {
|
|||
*/
|
||||
private final Map<PlatformType, DrcPlatformStrategy> drcStrategyMap = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 存储各平台对应的系统管理器实现
|
||||
* Key: PlatformType
|
||||
* Value: AirportSystemManager实现
|
||||
*/
|
||||
private final Map<PlatformType, AirportSystemManager> managerMap = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* 注册所有平台策略
|
||||
* Spring会自动注入所有实现了AirportPlatformStrategy、CoverPlatformStrategy、DronePlatformStrategy和DrcPlatformStrategy的Bean
|
||||
|
|
@ -68,8 +60,7 @@ public class PlatformStrategyFactory {
|
|||
List<AirportPlatformStrategy> airportStrategies,
|
||||
List<CoverPlatformStrategy> coverStrategies,
|
||||
List<DronePlatformStrategy> droneStrategies,
|
||||
List<DrcPlatformStrategy> drcStrategies,
|
||||
List<AirportSystemManager> systemManagers) {
|
||||
List<DrcPlatformStrategy> drcStrategies) {
|
||||
|
||||
// 注册机巢策略
|
||||
for (AirportPlatformStrategy strategy : airportStrategies) {
|
||||
|
|
@ -98,13 +89,6 @@ public class PlatformStrategyFactory {
|
|||
System.out.println(String.format("注册DRC平台策略: %s -> %s",
|
||||
strategy.getPlatformType().getName(), strategy.getClass().getSimpleName()));
|
||||
}
|
||||
|
||||
// 注册系统管理器
|
||||
for (AirportSystemManager manager : systemManagers) {
|
||||
managerMap.put(manager.getPlatformType(), manager);
|
||||
System.out.println(String.format("注册系统管理器: %s -> %s",
|
||||
manager.getPlatformType().getName(), manager.getClass().getSimpleName()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -159,29 +143,6 @@ public class PlatformStrategyFactory {
|
|||
return strategy;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据机巢SN获取对应的平台系统管理器
|
||||
*
|
||||
* @param airportSn 机巢序列号
|
||||
* @return 对应平台的AirportSystemManager实现
|
||||
*/
|
||||
public AirportSystemManager getSystemManager(String airportSn) {
|
||||
PlatformType platformType = airportPlatformRepository.getPlatformType(airportSn);
|
||||
|
||||
if (platformType == null) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("机巢未注册或平台类型未配置: %s", airportSn));
|
||||
}
|
||||
|
||||
AirportSystemManager manager = managerMap.get(platformType);
|
||||
|
||||
if (manager == null) {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("未找到平台系统管理器: %s (机巢: %s)", platformType.getName(), airportSn));
|
||||
}
|
||||
|
||||
return manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据平台类型获取机巢平台策略
|
||||
|
|
|
|||
Loading…
Reference in New Issue