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);
}
}
모든 Login Session 인스턴스에 대해 새로운 Gson 인스턴스를 만드는 것은 소용이 없다고 생각했습니다.
하지만 제가 걱정하는 것은 나사산 안전 문제입니다.초당 약 1000개 이상의 인스턴스가 생성됩니다.
Gson 인스턴스를 정적 필드로 사용해도 될까요?
조언/수정해 주셔서 감사합니다.
저는 괜찮은 것 같아요.GSON 인스턴스에는 특정 인스턴스와 관련된 것은 없습니다.LoginSession
그래서 정적이여야 합니다.
GSON 인스턴스는 스레드 세이프여야 하며 수정된 인스턴스와 관련하여 오류가 발생했습니다.
핵심Gson
클래스는 스레드 세이프입니다.방금 GSON에서 발생한 것으로 추정되는 스레드 안전 문제가 발생했습니다.커스텀을 사용할 때 문제가 발생하였습니다.JsonDeserializer
그리고.JsonSerializer
위해서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 직렬화 및 직렬화 해제 작업에 자유롭게 재사용할 수 있습니다.
얼마 전 스레드 안전성에 문제가 있어 Apache Commons에서 FastDateFormat을 사용하여 해결했습니다.
Gson 인스턴스를 재사용할 수 있는지 궁금해하는 사람들을 돕기 위해 Gist용 Gist 링크를 만들었습니다.그들은 세터가 없고 모든 대표팀은 비공개이다.
따라서 SimpleDateFormat 문제 이외에는 상태를 유지할 수 없습니다.
꼭 확인하세요.이런 답변은 처음입니다.반환하게 되어 기쁩니다. :)
언급URL : https://stackoverflow.com/questions/10380835/is-it-ok-to-use-gson-instance-as-a-static-field-in-a-model-bean-reuse
'programing' 카테고리의 다른 글
Vuex "TypeError: 정의되지 않은 속성 '데이터'를 읽을 수 없습니다" (0) | 2022.08.01 |
---|---|
Vuex 스토어에 여러 상태를 설정할 수 있습니까? (0) | 2022.08.01 |
Vue 라우터에서 경로 입력 전에 인증 토큰이 유효한지 확인하는 중 (0) | 2022.07.30 |
왜 이 두 번을 빼면 이상한 결과가 나올까요? (0) | 2022.07.29 |
Vue 2.0에서의 CSS 클래스 전환 (0) | 2022.07.29 |