Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring4组件注入通用_Java_Spring_Generics_Autowired_Inject - Fatal编程技术网

Java Spring4组件注入通用

Java Spring4组件注入通用,java,spring,generics,autowired,inject,Java,Spring,Generics,Autowired,Inject,我遇到了以下问题。我想用generic创建Spring@Component @Component public class ResponseDtoValidator<DTO> { public ResponseEntity<DTO> methodToInvoke(DTO dto) { return Optional.ofNullable(dto).map(result -> new >ResponseEntity<> (result, HttpS

我遇到了以下问题。我想用generic创建Spring@Component

@Component
public class ResponseDtoValidator<DTO> {

public ResponseEntity<DTO> methodToInvoke(DTO dto) {
return Optional.ofNullable(dto).map(result -> new >ResponseEntity<>
(result, HttpStatus.OK))
.orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); }
}

@Controller
public class SomeController {
@Inject
private ResponseDtoValidator<DTO1> responseDtoValidator1;

@Inject
private ResponseDtoValidator<DTO2> responseDtoValidator2;

public void someMethod() {
DTO1 dto1 = new DTO1();
DTO2 dto2 = new DTO2();
responseDtoValidator1.methodToInvoke(dto1);
responseDtoValidator2.methodToInvoke(dto2);
}
}
@组件
公共类响应的OVALIDATOR{
公众响应方法(DTO到DTO){
返回可选的.ofNullable(dto).map(结果->新建>响应属性
(结果,HttpStatus.OK))
.orElse(新响应(HttpStatus.NOT_FOUND));}
}
@控制器
公共类控制器{
@注入
私人响应的卵磷脂受体1;
@注入
私人响应的卵磷脂受体2;
公共方法(){
DTO1 DTO1=新的DTO1();
DTO2 DTO2=新的DTO2();
响应胆脂瘤1。方法诱发中风(dto1);
响应的卵磷脂2.方法吸入(dto2);
}
}

我可以像上面那样注入这个组件吗?实际上,我已经试过了,它似乎工作正常,你能确认我是否正确吗?

首先,春豆本身不能注射

关于你的问题,是的,它是可注射的,但注射时不要使用通用符号。正常注射就行了。泛型类型在泛型类的方法使用时发送

比如,

@Component 
public class ResponseDtoValidator<DTO> {

    public void getAbc(List<DTO> aList) {}
}
@组件
公共类响应的OVALIDATOR{
public void getAbc(列表列表){}
}
然后,

公共类测试{
@自动连线//或@Inject
私人应答应答器应答器应答器;
公共void testMethod(){
responseDtoValidator.getAbc(列表列表列表);
}
}

如果它确实有效,那么应该没有问题,对吧?请阅读这篇文章:这和我写的一样@igorekhovoh,我理解你的意思。但我注射时不应该使用通用标志的原因是什么?由于泛型类型仅在方法调用时发送,所以它是无用的?当注入bean时,这意味着Spring创建了一个组件类,在我的例子中,bean创建为singleton。对于带有泛型的@Component,在创建bean时必须定义泛型类型。如果我向这个注入的bean发送各种DTO-s,他将如何处理它呢?如果在创建bean时提供泛型类型,则不能将该bean与其他对象一起使用。比如,<代码>@Inject ResponseDtoValidator ResponseDtoValidator您只能使用此bean发送到
Type1Object
参数。如果您这样写:
responseDtoValidator.getAbc(列表列表)它获取不兼容的参数类型错误。
public class Test {

    @Autowired // or @Inject
    private ResponseDtoValidator responseDtoValidator;

    public void testMethod() {
        responseDtoValidator.getAbc(List<EnterATypeInHere> aList);
    }
}