首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Autowired与Constructor连用

@Autowired与Constructor连用
EN

Stack Overflow用户
提问于 2018-05-16 04:56:55
回答 1查看 31关注 0票数 0

这让我困惑很久了。我一直在想怎样才能方便地和他们一起工作。

今天,我真的陷入了这样的境地:

代码语言:javascript
复制
@Slf4j
@Service
public abstract class ServiceParserAbstract {
    private KubeServiceRetriever kubeServiceRetriever;

    public ServiceParserAbstract initialize(KubeServiceRetriever kubeServiceRetriever) {
        this.kubeServiceRetriever = kubeServiceRetriever;
        return this;
    }
}

我试图在抽象类中直接使用@Autowired,但是在尝试访问NPE时,它失败了。

然后,我想也许我可以将这些@Autowired放在后代上,如下所示,然后使用@PostConstruct访问它。

代码语言:javascript
复制
@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

代码语言:javascript
复制
public class KubeServiceRetriever {
    @Autowired
    private EnvironmentUsageRepository environmentUsageRepository;
}

现在,我想我有两条路要走:

  1. 使用@Autowired和原始原语Constructor创建实例;
  2. 使用其他方法而不是@Autowired来管理存储库。

请大家分享一些想法或线索。

,非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2018-05-16 06:18:55

一直使用@Autowired,它可以工作。

代码语言:javascript
复制
@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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50362705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档