这让我困惑很久了。我一直在想怎样才能方便地和他们一起工作。
今天,我真的陷入了这样的境地:
@Slf4j
@Service
public abstract class ServiceParserAbstract {
private KubeServiceRetriever kubeServiceRetriever;
public ServiceParserAbstract initialize(KubeServiceRetriever kubeServiceRetriever) {
this.kubeServiceRetriever = kubeServiceRetriever;
return this;
}
}我试图在抽象类中直接使用@Autowired,但是在尝试访问NPE时,它失败了。
然后,我想也许我可以将这些@Autowired放在后代上,如下所示,然后使用@PostConstruct访问它。
@Component
public class Service8Parser extends ServiceParserAbstract {
@Autowired
private KubeServiceRetriever kubeServiceRetriever;
@PostConstruct
public ServiceParserAbstract getInstance() {
return initialize(kubeServiceRetriever);
}
}
public class ServiceParserFactory {
public static Optional<ServiceParserAbstract> getParser(ServiceVersionEnum versionEnum) {
switch (versionEnum) {
case VERSION_8:
return Optional.of(new Service8Parser().getInstance());
case VERSION_8_EARLIER:
return Optional.of(new Service8EarlierParser());
default:
break;
}
return Optional.empty();
}
}但我还是失败了,完全不知道发生了什么。
为什么我必须在所有这些尝试中使用@Autowired。因为我不知道在不使用时如何使用@Autowired JPA。
public class KubeServiceRetriever {
@Autowired
private EnvironmentUsageRepository environmentUsageRepository;
}现在,我想我有两条路要走:
@Autowired和原始原语Constructor创建实例;@Autowired来管理存储库。请大家分享一些想法或线索。
,非常感谢!
发布于 2018-05-16 06:18:55
一直使用@Autowired,它可以工作。
@Component
public class ServiceParserFactory {
@Autowired
private Service8Parser service8Parser;
public Optional<ServiceParserAbstract> getParser(ServiceVersionEnum versionEnum) {
switch (versionEnum) {
case VERSION_8:
return Optional.of(service8Parser);
default:
break;
}
return Optional.empty();
}
}
@Slf4j
@Service
public abstract class ServiceParserAbstract {
@Autowired
private KubeServiceRetriever kubeServiceRetriever;
}
@Service
public class Service8Parser extends ServiceParserAbstract {
}
@Component
public class ServiceParser {
@Autowired
private ServiceParserFactory serviceParserFactory;
private ServiceParserAbstract serviceParser;
public ServiceDo parseService(Long envId, String serviceName) throws RetrieverException {
serviceParser = serviceParserFactory.getParser(ServiceVersionEnum.VERSION_8).get();
return serviceParser.parseSingleService(envId, serviceName);
}
}https://stackoverflow.com/questions/50362705
复制相似问题