10.2.2 Bộ lọc (Filters)
Bạn có thể đặt các bộ lọc vào giữa một pipeline tích hợp để cho phép hoặc từ chối các message tiếp tục đến bước tiếp theo trong luồng, như được minh họa trong hình 10.3.

Hình 10.3 Các bộ lọc dựa trên một số tiêu chí cho phép hoặc từ chối các message tiếp tục trong pipeline.
Ví dụ, giả sử rằng các message chứa giá trị kiểu số nguyên được gửi qua một kênh tên là numberChannel, nhưng bạn chỉ muốn các số chẵn được chuyển tiếp sang kênh tên là evenNumberChannel. Trong trường hợp đó, bạn có thể khai báo một bộ lọc với annotation @Filter như sau:
@Filter(inputChannel="numberChannel",
outputChannel="evenNumberChannel")
public boolean evenNumberFilter(Integer number) {
return number % 2 == 0;
}Ngoài ra, nếu bạn sử dụng phong cách cấu hình Java DSL để định nghĩa luồng tích hợp của mình, bạn có thể gọi filter() như sau:
@Bean
public IntegrationFlow evenNumberFlow(AtomicInteger integerSource) {
return IntegrationFlows
...
.<Integer>filter((p) -> p % 2 == 0)
...
.get();
}Trong trường hợp này, bạn sử dụng một biểu thức lambda để triển khai bộ lọc. Nhưng trên thực tế, phương thức filter() chấp nhận một GenericSelector làm đối số. Điều này có nghĩa là bạn cũng có thể tự triển khai interface GenericSelector, trong trường hợp nhu cầu lọc của bạn quá phức tạp để sử dụng lambda đơn giản.
