gpt4 book ai didi

java - Spring依赖注入(inject)泛型类型的用法

转载 作者:太空宇宙 更新时间:2023-11-04 09:26:38 25 4
gpt4 key购买 nike

我有一个关于 Spring 依赖注入(inject)和泛型类型使用的 SOLID 设计原则的问题。我有下一个通用接口(interface):

public interface EmailChecker<T> {
boolean check(T message);
}

然后我有两种实现:一种用于生产,一种用于登台环境

@Profile("!production")
@Component
public class EmailRequestCheckerStaging implements EmailChecker<EmailRequest> {
@Override
public boolean check(EmailRequest message) {
//TODO: some code here;
return result;
}
}

@Profile("production")
@Component
public class EmailRequestCheckerProduction implements EmailChecker<EmailRequest> {
@Override
public boolean check(EmailRequest message) {
//TODO: some code here;
return result;
}
}

最后这里是“emailChecker”字段的依赖注入(inject):

@Service
public class Receiver {
@Autowired
private EmailChecker<EmailRequest> emailChecker;

public void receiveMessage(EmailRequest dto) {
if(emailChecker.check(dto)) {
//TODO: some logic here
}
}

}

问题:这种依赖注入(inject)是否遵循所有 SOLID 原则?
注意:我有多个不同类型的“EmailChecker”接口(interface)实现(为简单起见,我描述了“EmailRequest”DTO 实现)

最佳答案

虽然基于意见,但注入(inject)的依赖项应该通过构造函数注入(inject)是显式的。

@Service
public class Receiver {
private EmailChecker<EmailRequest> emailChecker;

@Autowired //could actually be omitted since class has only one constructor
public Receiver(EmailChecker<EmailRequest> emailChecker) {
this.emailChecker = emailChecker;
}

public void receiveMessage(EmailRequest dto) {
if(emailChecker.check(dto)) {
//TODO: some logic here
}
}
}

这样 Receiver 类的使用者就知道它需要什么才能正确运行

具有显式依赖关系的类对于它们的需求更加诚实。他们非常清楚地说明了执行其特定职能所需的条件。

关于java - Spring依赖注入(inject)泛型类型的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57617963/

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