자바 주석 분석

머리말
    그동안 자바 의 사용자 정의 주 해 를 알 고 싶 었 습 니 다. 면접 때 도 비슷 한 문제 가 있 었 습 니 다. 오늘 은 드디어 공부 할 시간 이 있 습 니 다.
본문
주석 (주석) 개념
    주 해 는 자바 SE 5.0 버 전이 도입 되 기 시작 한 개념 으로 자바 소스 코드 에 대한 설명 이 며 메타 데이터 (데 이 터 를 설명 하 는 데이터) 입 니 다.
주해 와 주해 의 차이
  • 주석     주석 은 코드 에 대한 설명 으로 코드 의 독자 에 게 보 여주 면 독자 가 업무 논 리 를 정리 하 는 데 편리 하 다.
  • 주해    주해 도 코드 에 대한 설명 입 니 다. 도구 (코드 해석) 에 맞 춰 사용 하고 코드 의 컴 파일 에 참여 하여 응용 프로그램 에 보 여 줘 야 합 니 다.

  • 왜 주해 가 나 왔 습 니까?
         주 해 를 자주 사용 하기 전에 xml 로 메타 데이터 로 사 용 됩 니 다. 처음에 ssm (Spring, SpringMVC, Mybatis) 프레임 워 크 를 사 용 했 을 때 bean 과 bean 간 의 의존 관 계 는 xml 파일 을 통 해 설정 되 었 습 니 다. 이 xml 파일 과 소스 코드 가 분산 되 었 습 니 다. 마이크로 서비스, 분포 식 주해 가 유행 하면 서 시스템 이 점점 커지 고 xml 파일 로 관 리 를 설정 해 야 합 니 다.파일 설정 이 지루 하고 형식 이 안전 하지 않 습 니 다. (실행 기간 에 오류 가 발생 합 니 다) 이 때 는 비교적 간단 하고 직관 적 이 며 유형 이 안전 한 설정 방식 이 필요 합 니 다. 주 해 는 이에 따라 생 겨 납 니 다. Springboot 의 '설정 보다 약속 이 많 습 니 다' 방식 에 따라 주 해 를 통 해 그 의 미 를 약정 하고 xml 설정 파일 의 수량 을 줄 입 니 다.     자주 변동 하거나 복잡 한 설정 을 설정 할 때 xml 파일 을 사용 하 는 것 이 적당 하기 때문에 지금 은 주석 과 xml 방식 이 공존 합 니 다.
    주해 분류
        주 해 는 @ 로 시작 합 니 다. 저 희 는 응용 프로그램 에서 다양한 주 해 를 볼 수 있 습 니 다. 예 를 들 어 @ Autowired, @ Service, @ Controller, @ Override, @ Test, @ Value 등 이 있 습 니 다. 출처 에 따라 JDK 의 주해, 제3자 의 주해, 사용자 정의 주해 로 나 눌 수 있 습 니 다.
  • JDK 주석
  • 자바 에 3 대 주석 이 내장 되 어 있 습 니 다 @ Override (재 작성 방법 표시) @ Deprecated (시간 이 지 났 음 표시) @ SuppressWarnings (경고 무시)
  • 원 주해 (주해 의 주해) @ Target (주해 의 역할 목표) @ Retention (주해 의 생명주기) @ Document (주해 가 자바 Doc 에 포함 되 어 있 는 지 여부) @ Inherited (하위 클래스 통합 허용 여부)
  • 제3자 주해 (주로 각종 구조 에서 기원)
  • Spring 주석 @ RequestMapping, @ RestController, @ Configuration, @ Value, @ Controller, @ Service, @ Repository, @ Component 등
  • SpringBoot 주석 @ SpringBootApplication, @ EnableAutoConfiguration 등
  • JPA 주석 @ Table, @ Entity, @ Column, @ Id 등...
  • 사용자 정의 주 해 는 원 주 해 를 사용 하여 자신 이 정의 한 주 해 를 설명 합 니 다 (다음 글 은 사용자 정의 주 해 를 실현 할 때 까지 쓸 것 입 니 다)
  • 주해 가 무엇 입 니까?
         프로그램 코드 에서 자주 볼 수 있 는 @ 로 시작 하 는 것 은 대부분 주석 입 니 다.
    주해 정의 형식
        @interface     {
               1 
               2
    }
    

         주석 요소 성명 의 두 가지 형식
     type elementName();
     type elementName() default value;  
    

    주해 정의 실례
        @ Service 주 해 를 살 펴 보 겠 습 니 다.
    // ElementType.TYPE         
    @Target({ElementType.TYPE})
    // RetentionPolicy.RUNTIME        ,         
    @Retention(RetentionPolicy.RUNTIME)
    //   JavaDoc 
    @Documented
    //              
    @Component
    public @interface Service {
    
    	/**
    	 * The value may indicate a suggestion for a logical component name,
    	 * to be turned into a Spring bean in case of an autodetected component.
    	 * @return the suggested component name, if any (or empty String otherwise)
    	 */
    	@AliasFor(annotation = Component.class)
    	String value() default "";
    }
    

        주석 주석
    package java.lang.annotation;
    
    /**
     * The common interface extended by all annotation types.  Note that an
     * interface that manually extends this one does not define
     * an annotation type.  Also note that this interface does not itself
     * define an annotation type.
     *
     * More information about annotation types can be found in section 9.6 of
     * The Java™ Language Specification.
     *
     * The {@link java.lang.reflect.AnnotatedElement} interface discusses
     * compatibility concerns when evolving an annotation type from being
     * non-repeatable to being repeatable.
     *
     * @author  Josh Bloch
     * @since   1.5
     */
    public interface Annotation {
    }
     # The common interface extended by all annotation types.Also note that this interface does not itself define an annotation type.
     #           Annotation  ,           。
    

        즉, 우리 가 본 모든 주 해 는 기본적으로 Annotation 인 터 페 이 스 를 실현 한 인터페이스 이다.
    참고 문장
    https://segmentfault.com/a/1190000018209300 https://blog.csdn.net/qq_36762677/article/details/82469741
    총결산
        어디서나 주 해 를 볼 수 있 는 이 시대 에 주 해 를 알 아야 합 니 다. 읽 어 주 셔 서 감사합니다.

    좋은 웹페이지 즐겨찾기