Java Spring4组件注入通用
我遇到了以下问题。我想用generic创建Spring@ComponentJava 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
@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);
}
}