@FunctionalInterface public interface EqualedValueProvider<T>
CsvEquals
による等値かどうか比較する際の値を提供するインタフェースです。
値を別ファイルやDBから取得する時などサービスクラスとして実装します。
基本的な使い方は、 CsvEquals
のJavaDocを参照してください。
フィールドごとにリソースを切り替えたい場合は、メソッドの引数FieldAccessor
で判定を行います。
また、独自のパラメータを渡したい時は、独自のアノテーションを作成し、それをフィールドに付与して、
引数FieldAccessor
から取得して判定します。
// 読み込むリソースを定義されているフィールドやクラスで分ける場合
public class FileEqualedValueProvider implements EqualedValueProvider<Integer> {
@Override
public Collection<Integer> getEqualedValues(final FieldAccessor field) {
final String path;
if(field.getDeclaredClass().equals(AdminCsv.class)) {
path = "equaled_value_admin.txt";
} else {
path = "equaled_value.txt";
}
String lines;
try {
lines = Files.readAllLines(new File(path).toPath(), Charset.forName("UTF-8"));
} catch (IOException e) {
throw new RuntimeException("fail reading the equaled value file.", e);
}
// 読み取った値をInteger型に変換します。
return lines.stream()
.map(l -> Integer.valueOf(l))
.collect(Collectors.toList());
}
}
Spring Frameworkと連携している場合は、プロバイダクラスをSpringBeanとして登録しておくことでインジェクションされます。
また、メソッドgetEqualedValues(FieldAccessor)
は、定義したフィールド単位に呼ばれるため、
多数のフィールドで定義していると何度も呼ばれ、効率が悪くなる場合があります。
このようなときは、Spring Framework 3.1から追加された Cache Abstraction(キャッシュの抽象化)機能を使うと改善できます。
// SpringBeanとして登録する場合。
@Service
@Transactional
public class EqualedValueProviderImpl implements EqualedValueProvider<Integer> {
// リポジトリのインジェクション
@Autowired
private EqualedValueRepository equaledValueRepository;
@Override
public Collection<Integer> getEqualedValues(final FieldAccessor field) {
final Role role;
if(field.getDeclaredClass().equals(AdminCsv.class)) {
role = Role.admin;
} else {
role = Role.normal;
}
return loadWords(role).stream()
.map(dto -> dto.getValue())
.collect(Collectors.toList());
}
// リポジトリから取得した内容をキャッシュする。
// 引数 role をキーにして、区別する。
@Transactional(readOnly = true)
@Cacheable(cacheNames="equaledValues", key="#role")
public List<EqualedDto> loadWords(Role role) {
if(role.euals(Role.admin)) {
return equaledValueRepository.findByRole(role);
} else {
return equaledValueRepository.findAll();
}
}
}
修飾子とタイプ | メソッドと説明 |
---|---|
Collection<T> |
getEqualedValues(FieldAccessor field)
比較対象の値を取得します。
|
Collection<T> getEqualedValues(FieldAccessor field)
field
- フィールド情報Copyright © 2022 mygreen. All rights reserved.