IT박스

모델 빈에서 Gson 인스턴스를 정적 ​​필드로 사용하는 것이 괜찮습니까 (재사용)?

itboxs 2020. 7. 1. 08:17
반응형

모델 빈에서 Gson 인스턴스를 정적 ​​필드로 사용하는 것이 괜찮습니까 (재사용)?


내가 구현 한 모델은 다음과 같습니다.

public class LoginSession {
    private static final Gson gson = new Gson();

    private String id;
    private String name;
    private long timestamp;

    public LoginSession(String id, String name) {
        this.id = id;
        this.name = name;
        this.timestamp = System.currentTimeMillis();
    }

    public String toJson() {
        return gson.toJson(this);
    }

    public static LoginSession fromJson(String json) {
        checkArgument(!isNullOrEmpty(json));
        return gson.fromJson(json, LoginSession.class);
    }
}

모든 LoginSession 인스턴스에 대해 새 Gson 인스턴스를 만드는 것이 쓸모 없다고 생각했습니다.

그러나 내가 걱정하는 것은 스레드 안전성 문제입니다. 약 1000 개 이상의 인스턴스 / 초가 생성됩니다.

정적 필드로 Gson 인스턴스를 사용해도 괜찮습니까?

조언 / 수정에 감사드립니다.


나에게 괜찮아 보인다. GSON 인스턴스에는의 특정 인스턴스와 관련된 것은 LoginSession없으므로 정적이어야합니다.

GSON 인스턴스는 스레드 안전해야 하고, 거기 에 대한 버그 수정 된 것으로는.


핵심 Gson클래스는 스레드로부터 안전합니다. 방금 GSON과 관련하여 스레드 안전성 문제가 발생했습니다. 사용자 정의를 사용하는 경우이 문제는 발생 JsonDeserializerJsonSerializer위해 Date분석 및 서식. 결과적으로 스레드 안전 문제는 내 메소드 SimpleDateFormat가 스레드 안전하지 않은 정적 인스턴스를 사용하는 것과 관련 이 있습니다. 인스턴스 에서 정적 SimpleDateFormat래핑하면 ThreadLocal모든 것이 잘 작동했습니다.


의견에 따르면 기존 단위 테스트는 실제로 많은 테스트를 수행하지 않으므로 스레드 안전과 관련된 모든 것에주의하십시오 ...

스레드 안전성을 검사 하는 단위 테스트 가 있습니다 .

/**
 * Tests for ensuring Gson thread-safety.
 *
 * @author Inderjeet Singh
 * @author Joel Leitch
 */
public class ConcurrencyTest extends TestCase {
  private Gson gson;
  ...

이 장치 테스트가 가능한 모든 기계 구성에서 가능한 모든 문제를 찾기에 충분한 지 궁금 할 것입니다. 이것에 대한 의견?

문서 에이 문장이 있습니다 .

Gson 인스턴스는 Json 작업을 호출하는 동안 상태를 유지하지 않습니다. 따라서 여러 Json 직렬화 및 역 직렬화 작업에 동일한 객체를 자유롭게 재사용 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/10380835/is-it-ok-to-use-gson-instance-as-a-static-field-in-a-model-bean-reuse

반응형