패키지 안노; 가져 오기 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"; // 일반 사항이 내부 상대적으로 작다는 // 공공 추상적는 일반적으로 기본이다 공공 추상적 인 문자열 [] 테스트 (); }