gpt4 book ai didi

java - 在另一个实例变量中使用 Autowiring 参数

转载 作者:行者123 更新时间:2023-11-30 02:00:01 26 4
gpt4 key购买 nike

我有一个实现接口(interface)的服务。我现在想编写一个映射器,基本上就是说,当我传入这个枚举类型时,使用该服务。这就是我所拥有的

@Service
MyService implements Service {}


@Component
@RequiredArgsConstructor
MyMapper implements Mapper<Enum, Service> {

private final MyService myService;

private ImmutableMap<Enum, Service> MAPPER = ImmutableMap.<MyEnum, MyService>builder()
.put(Enum.A, myService)
.build();;

@Override
public Service map(Enum input) {
return MAPPER.get(input);
}
}

但是,这似乎行不通。我认为我不允许使用( Autowiring )实例变量来实例化另一个实例变量。

为了解决这个问题,我现在使用了单例模式。

@Service
MyService implements Service {}


@Component
@RequiredArgsConstructor
MyMapper implements Mapper<Enum, Service> {

private final MyService myService;

private ImmutableMap<Enum, Service> MAPPER = null;

@Override
public Service map(Enum input) {
if(MAPPER == null){
MAPPER = createMapper();
}
return MAPPER.get(input);
}

private ImmutableMap<Enum, Service> createMapper(){
return ImmutableMap.<MyEnum, MyService>builder()
.put(Enum.A, myService)
.build();;
}
}

这似乎可行,但我想知道是否还有其他选项可以解决这个问题。

最佳答案

对于这个问题,服务定位器是最合适的。

我的枚举:-

public enum MyEnum {
A,
B
}

创建服务并使用名称“A”和“B”(枚举的名称作为字符串):-

 @Service("A")
MyService1 implements Service {}

@Service("B")
MyService2 implements Service {}

创建MyMapper接口(interface):-

public interface MyMapper {

Service map(MyEnum myEnum);

}

配置ServiceLocatorFactoryBean:-

@Bean
public ServiceLocatorFactoryBean serviceLocatorFactoryBean(){
ServiceLocatorFactoryBean bean = new ServiceLocatorFactoryBean();
bean.setServiceLocatorInterface(MyMapper.class);
return bean;
}

开始使用:-

@Autowired
MyMapper mapper;

关于java - 在另一个实例变量中使用 Autowiring 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53200568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com