2017-07-28 3 views
-1

次の問題が発生しました。私はSpring @Componentをジェネリックで作成したいと思っていますスプリング4コンポーネントインジェクト(汎用)

@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); 
} 
} 

上記のようにこのコンポーネントを注入できますか?実際には、私は試して、それは正常に動作するようだ、あなたは私が正しいかどうかを確認してくださいできますか?

+0

正常に機能していれば問題ありません。 – Lino

+0

https://blog.jayway.com/2013/11/03/spring-and-autowiring-of-generic-types/ –

答えて

0

第1に、春の豆をそれ自体で注入することはできません。

あなたの質問に関しては、はい、注射可能ですが、注射時には一般的な徴候は使用しないでください。ちょうどそれを正常に注入する。ジェネリッククラスのメソッドが利用されている場合、ジェネリック型は送信されます。

たとえば、

@Component 
public class ResponseDtoValidator<DTO> { 

    public void getAbc(List<DTO> aList) {} 
} 

次に、

public class Test { 

    @Autowired // or @Inject 
    private ResponseDtoValidator responseDtoValidator; 

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

ください、この記事をお読みください:https://blog.jayway.com/2013/11/ 03/spring-and-autowiring-of-generic-types/ –

+0

これは私が書いたものと同じです@IgorOrekhov –

+0

ああ、あなたが何を意味するのか理解しています。しかし、私が注射の際に一般的な徴候を使用すべきでない理由は何でしょうか?ジェネリック型はメソッド呼び出しでのみ送信されるという事実のために無用ですか? –

関連する問題