단순한 반사 효과 IOC를 사용하여 시뮬레이션

패키지 안노; 

가져 오기 java.lang.annotation.Annotation,
 가져 오기 java.lang.reflect.Constructor의;
 가져 오기 java.lang.reflect.Field의로서
 가져 오기 java.lang.reflect.Method와,
 가져 오기 java.util.Arrays; 

/ ** 
 * @program : tx_annotation_demo 
 * @description은 : 아날로그 구현 반사 IOC (제어 반전)를 사용 
 * @author : CZG 
 * @Create : 2019년 9월 27일 22시 41분 
 * / 
공용  클래스 MySpring { 

    공공  정적  무효 메인 (문자열 [] 인수) {
         // 제목 : 매개 변수 : 패키지는 클래스 이름 문자열 매개 변수 이름 : 대상 객체 (데이터 생성자 매개 변수에 존재하지 않는) 이미 존재하는 주석 데이터에 해당하는 

        사람 피를= (사람) IOC의 ( "anno.Person" ); 
        에서 System.out.println (p.toString ()); 
    } 


    공공  정적 객체 IOC의 (문자열 클래스 이름) { 

        개체 O = ;
         은 try { 
            클래스 clazz에 = 가 Class.forName ( 클래스 이름);
              // 객체 얻을 
             O를 = clazz.newInstance ();
              // 인수없이 얻을 생성자 
            생성자 생성자 = clazz.getConstructor (); 

            에서 System.out.println ( "----------------------- - --------------- "얻은 주석 데이터 시작 )
             // 인수 사용자 정의 주석과 생성자, 상기에서 얻어진을
            주석 = constructor.getAnnotation 주석 (MyAnnotaion. 클래스 );
             // 얻을 주석 클래스 클래스 
            클래스 aClass = annotation.getClass ();
             // 주석을 획득 클래스의 방법 
            ( "테스트"방법, 시험 aClass.getMethod는 = );
             // 얻을 그 내부 데이터 
            문자열 [] 데이터 = (문자열 []) test.invoke (주석) 
            에서 System.out.println ( "주석 데이터"+ ; Arrays.toString (데이터)의) 

            에서 System.out.println ( " -------------- 복합 오브젝트 세트를 구성하는 방법 : 설정 +는 개체 속성 --------------- "의 이름의 첫 글자를 대문자로 ) 

            // 구축 조합 setXxxx 방법을 나타내는 개체 개체가
             // 개인 재산을 구하는
            이 필드는, [] = 필드 clazz.getDeclaredFields ();
             // 루프 속성 이름을 
            위해 ( int로 , I가 fields.length를 <; I = 0 I가 ++ ) { 
                필드, 필드 = 필드 [I] 
                문자열 이름 = field.getName ();
                 // 의 설정 방법에 대응 결합 특성 
                모두 StringBuilder setMethod를 = 새로운 새 모두 StringBuilder 추가] ( "세트") (. name.substring (0,1 ) .toUpperCase는 ()) 
                        으로 .Append (name.substring ( . 1 ))
                 // 얻을 속성 입력 
                클래스 filedType = Field.getType을 ();
                 //조작 세트의 방법을 얻을 수 및 
                방법이 방법은 = clazz.getMethod (setMethod.toString (), filedType이);
                 // 판명 다른 대응하는 주석 문자열 문자열 유형을 읽을 필요가
                 // 정수 정수를 새로운 새로운 I = ( "") ;
                 // String 타입 생성자로 해당 속성 타입을 발견하는 것은 새로운 객체를 생성 
                Method.invoke이. (O, filedType.getConstructor (문자열 클래스 ) .newInstance (데이터 [I])) 
            } 

        } 캐치 (예외 E) { 
            e.printStackTrace (); 
        } 

        리턴 O; 
    } 

}
패키지 ANNO; 

/ ** 
 * @program : tx_annotation_demo 
 * @description :自定义注解测试使用
 * @author : czg 
 * @create : 2019년 9월 27일 21시 54분 
 * / 
공용  클래스 사람 { 

    // @MyAnnotaion (테스트 = { "czg ","18 ","男"}) 
    개인 문자열 이름; 

    개인 정수 나이; 

    개인 문자열 섹스; 

    @MyAnnotaion (테스트 = { "czg", "18", "男" })
     공공 사람 () { 
    } 

    공공 사람 (문자열 이름, 정수 나이, 문자열 섹스) {
          .name을 = 이름;
         .나이;
         .sex = 섹스; 
    } 

    공공 문자열 getName () {
         반환 이름; 
    } 

    공공  무효 에서는 setName (문자열 이름) {
          .name을 = 이름; 
    } 

    공공 정수 getAge () {
         반환 시대; 
    } 

    공공  무효 setAge (정수 연령) {
          .age = 나이; 
    } 

    공공 문자열 getSex는 () {
         반환 섹스; 
    } 

    공공  무효 setSex (문자열 섹스) {
         .sex = 성; 
    } 

    @Override 
    공공 문자열 toString () {
         반환 "사람 {"+ 
                "이름 = '"+ 이름 +'\ ''+ 
                ", 연령 ="+ 나이 + 
                "섹스 = '"+ 성 +'\ ''+ 
                '}' ; 
    } 
}
패키지 안노; 

가져 오기 . java.lang.annotation의 *의 클래스 ; 

/ ** 
 tx_annotation_demo : * @program 
 * @description : 
 * 
 * 사용자 정의 (인터페이스의 사용에 다소 유사) 주석 
 * 특징 : 주석 방법은 반환 값이 있어야합니다, 반환 값 다음과 같은 다섯 개 가지해야 
 배열 형 @ * 기본 문자열 데이터 형식 열거 형의 열거 형 주석 유형 (내부 배열은 먼저 네 있어야합니다) 
 * 
 메타 주석이되지 않습니다 : * 참고도 좋다 위안 (RMB 참고를 제공하는 자바 주석을 사용해야합니다 사용하기 사용하는 데 사용 등) 사용자 정의 주석을 설명하는 데 사용됩니다 
 * 
 * 일반 메타 주석이 있습니다 : @Target 설명은 위의 노트 이상 (의 사용을 넣어 어디 문이 노트, 일반적으로 위의 속성, 메서드, 클래스, 상기 구성에있어서, 상기 파라미터들) 
 * 상기 방법 ElementType.FIELD (상기 속성) ElementType.METHOD () ElementType.CONSTRUCTOR (생성자 위) 주석 될 수 
 *이 주석 전류에 기재된 어떤 역할 @Retention의 소스 도메인 : 소스 파일 CLASS : 바이트 코드 파일 가동 시간 : 메모리는 실행 
 현재 주석 수 있을지 * 설명 @Inherited 클래스 객체는 상속
 * @Documented 현재 주석은 문서를 생성 할 수 있는지를 설명 
 * @author : CZG 
 * @Create : 2019년 9월 27일 20시 50분 
 * / 
@Target ({ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR}) 
@Retention ( RetentionPolicy.RUNTIME) 
공공 @의 인터페이스 MyAnnotaion { 

    공공  정적  최종 문자열 NAME_TEST = "XXXX"; // 일반 사항이 내부 상대적으로 작다는 

    // 공공 추상적는 일반적으로 기본이다 
    공공  추상적 인 문자열 [] 테스트 (); 
}

 

추천

출처www.cnblogs.com/czgxxwz/p/11601014.html