JAVA 기술 발전-당신 이 모 르 는 J2SE(4)

1.주석
     자바 가 1.8 까지 발전 한 오늘날 개발 자 들 은 자바 주해 가 낯 설 지 않 을 것 이다.SSH 프레임 워 크 든 다른 자바 응용 이 든 주해 의 존 재 는 개발 자 들 에 게 큰 편 의 를 제공 했다.자바 주 해 는 J2SE 5.0 에서 제 시 된 새로운 특성 으로 하나의 클래스 에 해당 합 니 다.이 주 해 를 사용 하면 이러한 인 스 턴 스 대상 을 만 든 것 과 같 습 니 다.가방,클래스,방법,파라미터,구성원 변수 에 추가 할 수 있 고 응용 이 매우 광범 위 합 니 다.
     J2SE 5.0 에서@SuppressWarnings(),@Deprecated@override세 가지 상용 주 해 는 각각 클래스 나 방법 으로 컴 파일 시 경 고 를 제거 하고 시간 이 지나 면 부모 클래스 를 덮어 쓰 는 방법 입 니 다.자바 API 의 자바.lang 패키지 에서 이 주해 유형 과 구체 적 인 사용 장면 을 볼 수 있 습 니 다.
2.사용자 정의 주석
     이렇게 많은 주 해 를 사 용 했 는데,다음은 어떻게 스스로 주 해 를 정의 하고 응용 하 는 지 를 소개 한다.
1.주 해 를 정의 합 니 다.
IDE 에서 다음 과 같은 새로운 Annotation 클래스 를 만 듭 니 다.
public @interface Annotation1 {

}

2.다른 클래스 에서 이 주 해 를 인용 하고 반사 로 테스트 하 며 주해 지향 류 를 인쇄 합 니 다. 
@Annotation1
public class AdviseImpl implements Advice {
	
	public static void main(String[] args) {
		if(AdviseImpl.class.isAnnotationPresent(Annotation1.class))
		{
			Annotation1 annotation=(Annotation1)AdviseImpl.class.getAnnotation(Annotation1.class);
			System.out.println(annotation);
		}
	}

테스트 결과@Annotation 1 에 대응 하 는 주해 류 가 인쇄 되 지 않 았 습 니 다.이것 은 주해 의 생명주기 와 관련 이 있 습 니 다.
생명 주기
     자바 주 해 는 세 개의 생명 주기 가 있 습 니 다.원본 파일 단계,class 파일 단계,실행 단계(자바 메모리 에 바이트 코드 를 넣 었 습 니 다),기본 값 은 class 단계 입 니 다.주 해 를 주석 하 는 이 유 는 원본 프로그램 이 바이트 코드 로 컴 파일 할 때,또는 바이트 코드 를 자바 메모리 에 저장 할 때,두 단계 모두 원본 파일 의 주 해 를 제거 할 수 있 기 때 문 입 니 다.주 해 를 규정 하 는 생명 주 기 는 특정한 단계 에서 이 주해 의 보존 단 계 를 확인 하 는 데 사 용 됩 니 다.
위의 예 에서 주해 류 를 인쇄 하지 않 은 이 유 는 기본 수명 주기 가 class 이기 때문에 실행 할 때 인쇄 하지 않 았 습 니 다.주 해 를@Retention 소스 주 해 를 추가 하면 매 거 진 유형 입 니 다.세 개의 값 은 각각 주 해 를 대표 하 는 세 개의 생명 주기 가 있 습 니 다.CLASS,SOURCE,RUNTIME;주 해 를 실행 기간 으로 설정 할 때 위 코드 를 실행 하면 Annotation 1 주 해 를 얻 을 수 있 는 대응 클래스 는@it.webservice.mobile.annotation 1()입 니 다.
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation1 {

}

4.주해 의 역할 범위
     주해 의 응용 에서 우 리 는 클래스 에 사용 되 는 주해,방법 에 사용 되 는 주해,파라미터,필드 에 대한 주해 가 있다 는 것 을 알 고 있 습 니 다.이것 이 바로 주해 의 역할 범위 입 니 다.자바 는@Target 소스 주 해 를 사용 하여 이 속성 을 설정 합 니 다.마찬가지 로@Target 도 매 거 유형 입 니 다.method 는 이 주 해 를 방법 에 사용 하고 비 방법 적 인 곳 에 컴 파일 하면 통과 하지 않 습 니 다.Type 은 클래스 에 놓 을 수 있 음 을 표시 합 니 다.Field-필드;local_Varialble-변수;파라미터-방법의 매개 변수.API 에서 Element Type 을 찾 으 면 이 정 보 를 얻 을 수 있 습 니 다.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})//          、 、   
public @interface Annotation1 {

}

5.주해 의 고급 응용
     주 해 를 위해 속성 을 설정 합 니 다.이 순 위 는 낯 설 게 들 릴 수 있 지만 다양한 속성 을 가 진 주 해 를 사용 해 보 셨 을 거 라 고 믿 습 니 다.예 를 들 어 name 은 이 무상 태 주해 의 속성 입 니 다.
@Stateless(name = "conventionBeanImpl")

     설정 가능 한 속성 치가 있어 주해 사용 의 유연성 을 크게 향상 시 키 고 코드 의 양 을 줄인다.그러면 어떻게 주석 에 속성 을 추가 합 니까?
1.주석 에 속성 을 추가 하면 기본 값 을 설정 할 수 있 습 니 다.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
public @interface Annotation1 {
	String color();
	String value() default "dfda";
}

2.주 해 를 사용 할 때 이 속성 값 을 주 해 를 위해 주 해 를 초기 화 하 는 데 사 용 됩 니 다.그렇지 않 으 면 컴 파일 오류 가 발생 합 니 다.주:default 기본 값 이 있 는 주 해 는 들 어 오지 않 아 도 됩 니 다.
@Annotation1(color="green")
public class AdviseImpl implements Advice {	
	public static void main(String[] args) {
		if(AdviseImpl.class.isAnnotationPresent(Annotation1.class))
		{
			Annotation1 annotation=(Annotation1)AdviseImpl.class.getAnnotation(Annotation1.class);
			System.out.println(annotation);
			System.out.println(annotation.color());
			System.out.println(annotation.value());
		}
	}
     각각 green 과 dfda 를 인쇄 합 니 다.
3.속성 값 을 주석 으로 추가 하 는 경우
일반 주해 의 속성 값 은 기본 형식 입 니 다.속성 값 이 주해 일 때:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
public @interface Annotation1 {
	Annotation2 annotationAttr() default @Annotation2(value="dkdkkd"); //    @Annotation2   , Annotation2  value  
}  
      이 주석 사용 시:
@Annotation1(color="green",annotationAttr=@Annotation2("max")) // Annotation1  annotationAttr  ,    annotation2 value   max
public class AdviseImpl implements Advice {
	
	public static void main(String[] args) {
		if(AdviseImpl.class.isAnnotationPresent(Annotation1.class))
		{
			Annotation1 annotation=(Annotation1)AdviseImpl.class.getAnnotation(Annotation1.class);
		}
	}
     이것 은 EJB 3.0 에서 매우 광범 위 하 게 사용 되 고 프로젝트 에서 여러 번 주해 의 속성 을 사용 하 는 것 은 여전히 주해 이다.소 개 를 통 해 이 제 는 원 리 를 알 아야 한다.이러한 특성 을 우 리 는 평소에 사용 하고 그 원 리 를 이해 한 후에 스스로 만 들 면 프로젝트 에서 의 구체 적 인 응용 을 연상 시 킬 수 있다.

좋은 웹페이지 즐겨찾기