春の @Transactional アノテーションを使用した 2 つのメソッドがあります。
@Transactional(readOnly = true)
public ConfigParameter getConfigParameter(String key) {
@Transactional(readOnly = false)
public void setConfigParameter(ConfigParameter param) {
readOnly = false は、メソッドが同期されることを意味します。セッターでreadyOnly = falseが設定されている場合、セッターへのアクセスが同期されていることを意味します。
そのような場合、getter も readOnly を true に設定する (同期する) 必要があることに同意しますか。そうしないと、返されたオブジェクトの状態が矛盾するリスクがあるためです。
このクラスを FindBugs でチェックして警告を受け取ったときに、この問題にたどり着きました。
非同期 get メソッド、同期 set メソッド このクラスには、set メソッドが同期され、get メソッドが同期されない、同様の名前の get メソッドと set メソッドが含まれます。get メソッドの呼び出し元は、オブジェクトの一貫した状態を必ずしも認識しないため、これにより、実行時に誤った動作が発生する可能性があります。get メソッドは同期化する必要があります。