>  기사  >  Java  >  Java의 열거형 싱글톤 패턴 및 소스 코드 분석의 예

Java의 열거형 싱글톤 패턴 및 소스 코드 분석의 예

黄舟
黄舟원래의
2017-08-08 09:57:041526검색

이 글은 주로 JAVA 열거형 싱글톤 모드에 대한 관련 정보와 소스코드 분석의 상세한 예시를 소개합니다. 필요하신 분들은 참고하시면 됩니다.

JAVA 열거형 싱글턴 모드와 소스코드 분석 예시의 자세한 설명은

싱글톤 모드가 많이 있습니다. 단일 관심 모드를 구현하려면 열거형을 사용하는 것이 가장 좋다고 온라인에서 분석되었습니다. 이점은 다음 세 가지에 지나지 않습니다.

1. 스레드 안전성

2.

3 .반사 공격을 방지하지만 ENUM 싱글톤이 위의 세 가지 사항을 어떻게 달성하는지 설명하는 기사가 없는 것 같습니다. 다음 세 가지 사항을 설명해 주세요.

스레드 안전성의 첫 번째 사항은 다음에서 확인할 수 있습니다. 디컴파일된 클래스 소스 코드도 클래스 로딩 메커니즘을 통해 보장됩니다. (해결됨) 두 번째 직렬화 문제에 대해서는 열거형 클래스 자체가 readResolve() 메서드를 구현한다는 기사가 있으므로 이 메소드는 현재 제가 직접 구현한 클래스입니다(해결책)

리플렉션 공격의 세 번째 점에 대해서는 다음과 같은 리플렉션 공격을 직접 시도했는데 오류가 발생했습니다... 아래 디컴파일된 클래스 소스코드를 읽어보니, 싱글톤 클래스의 수정은 추상적이므로 인스턴스화할 수 없기 때문에 이해합니다. (해결책)

다음은 제가 작성한 열거형 싱글톤과 그 클래스 파일을 디컴파일한 클래스입니다

Enumeration 싱글턴

public enum Singleton {
  INSTANCE {

    @Override
    protected void read() {
      System.out.println("read");
    }

    @Override
    protected void write() {
      System.out.println("write");
    }

  };
  protected abstract void read();
  protected abstract void write();
}

디컴파일 후 복원한 클래스

public abstract class Singleton extends Enum
{

  private Singleton(String s, int i)
  {
    super(s, i);
  }

  protected abstract void read();

  protected abstract void write();

  public static Singleton[] values()
  {
    Singleton asingleton[];
    int i;
    Singleton asingleton1[];
    System.arraycopy(asingleton = ENUM$VALUES, 0, asingleton1 = new Singleton[i = asingleton.length], 0, i);
    return asingleton1;
  }

  public static Singleton valueOf(String s)
  {
    return (Singleton)Enum.valueOf(singleton/Singleton, s);
  }

  Singleton(String s, int i, Singleton singleton)
  {
    this(s, i);
  }

  public static final Singleton INSTANCE;
  private static final Singleton ENUM$VALUES[];

  static 
  {
    INSTANCE = new Singleton("INSTANCE", 0) {

      protected void read()
      {
        System.out.println("read");
      }

      protected void write()
      {
        System.out.println("write");
      }

    };
    ENUM$VALUES = (new Singleton[] {
      INSTANCE
    });
  }
}

위 내용은 Java의 열거형 싱글톤 패턴 및 소스 코드 분석의 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.