이 논문은 예에서 Java 반사 메커니즘을 분석합니다. 다음과 같이 참조에 대해 공유하십시오.
반사, 나는 종종 그들이 몇 가지 재료를 읽었고 디자인 패턴에서 그것들을 사용했을 수도 있다고 들었지만, 나는 이번에는 그것을 다시 배웠고 괜찮다고 느꼈습니다!
1. 반사의 개념을 살펴 보겠습니다.
이는 주로 프로그램이 자체 상태 또는 행동에 액세스, 감지 및 수정할 수있는 능력을 말하며, 상태 및 자체 행동의 결과에 따라 설명 된 응용 프로그램의 상태 및 관련 의미를 조정 또는 수정할 수 있습니다.
반사는 Java의 강력한 도구로 구성 요소간에 소스 코드를 연결하지 않고 실행할 때 조립할 수있는 유연한 코드를 쉽게 만들 수 있습니다. 그러나 반사의 부적절한 사용은 비용이 많이들 것입니다!
개념을보고 계속 읽으십시오.
2. 반사 메커니즘의 역할 :
1. 디 컴파일 : .class->. Java
2. 반사 메커니즘을 통해 Java 객체의 속성, 방법, 생성자 등에 액세스;
이것은 이해하기 쉬운 것 같습니다. 이러한 기능을 구현하는 방법을 자세히 살펴 보겠습니다.
3. 먼저 Sun 수업을 반사 메커니즘을 제공하는 클래스를 살펴 보겠습니다.
java.lang.class; java.lang.reflect.constructor;
우리는이 네 가지 클래스에서 많은 방법, 속성 및 기타 작업을 반영하여 쿼리 할 수 있습니다. 아니면 API를 지속적으로 쿼리하는 법을 배워야합니까?
4. 특정 기능 구현 :
1. 반사 메커니즘으로 클래스를 얻는 세 가지 방법이 있습니다
// 첫 번째 방법 : class.forname ( "Employee"); java 언어의 객체는 getclass 방법을 가지고 있습니다.
2. 객체 만들기 : 수업을 얻은 후에는 객체를 만들고 Newinstance를 사용합니다.
class c = class.forname ( "Employee"); //이 클래스 객체로 표시되는 클래스의 새 인스턴스를 만듭니다.
3. 속성 가져 오기 : 모든 속성 및 지정된 속성으로 나뉩니다.
①. 먼저 모든 속성을 얻는 글쓰기 방법을 살펴 봅니다.
// 전체 클래스 클래스를 가져옵니다 c = class.forname ( "java.lang.integer"); // 모든 속성을 가져옵니다 속성 StringBuffer sb = new StringBuffer (); // 각 속성을 추가 방법 으로이 문자열로 분할하십시오 // 가장 바깥 쪽 공개 정의 sb.append (modifier.toString (c.getModifiers ()) + "클래스" + c.getSimplename ) +"{/n"); // (필드 필드 : fs) {sb.append ( "/t"); // space sb.append (modifier .ToString (field.getModifiers ()) +에 대한 내부의 각 속성 ""); // public, static 등과 같은 속성의 수정자를 가져옵니다 (sb.append (field.getType (). getSimplename () + ""); // 속성 유형 이름 SB.Append ( field.getName () + ";/n"); // 속성 이름 + enter} sb.append ( "}"); system.out.println (sb);②.
public static void main (string [] args)은 예외를 던집니다 {<span style = "white-space : pre"> </span> // 이전 방법 :/* user u = u.age = 12; // SETTING.out.println (U.age); // 클래스 c = class.forname ( "user"); ); // vartion idf.set의 id 속성에 "110"을 할당합니다.4. 방법과 건축 방법을 얻고 더 이상 자세하게 설명하지 않고 키워드를 살펴보십시오.
메소드 키워드
의미
getDeclaredMethods ()
모든 방법을 얻으십시오
getreturntype ()
메소드의 반환 유형을 가져옵니다
getParameterTypes ()
수신 매개 변수 유형을 얻으십시오
getDeclaredMethod ( "메소드 이름", 매개 변수 유형 .class, ...)
특정 방법을 얻으십시오
생성자 키워드
의미
getDeclaredConstructors ()
모든 생성자를 얻으십시오
getDeclaredConstructor (Parameter Type.Class, ...)
특정 생성자를 얻으십시오
부모 클래스 및 부모 인터페이스
의미
getSuperClass ()
특정 수업의 부모 수업을 받으십시오
getInterfaces ()
특정 유형의 구현에 대한 인터페이스를 얻으십시오
이런 식으로, 우리는 클래스의 다양한 내용을 얻고 디 컴파일 할 수 있습니다. 먼저 컴파일 한 다음 실행되는 Java와 같은 언어의 경우, 반사 메커니즘을 사용하면 코드를보다 유연하고 객체 지향을 쉽게 구현할 수 있습니다.
5. 반사 플러스 구성 파일은 프로그램을보다 유연하게 만듭니다.
설계 패턴에 대한 연구에서 추상 공장을 학습 할 때 반사는 데이터베이스 링크 문자열 등을보다 편리하게 읽는 데 사용되므로 당시에는 많이 이해하지 못하므로 그에 따라 복사했습니다. .NET에서 반사 + 구성 파일의 사용을 살펴보십시오.
당시 사용 된 구성 파일은 app.config 파일이고 컨텐츠는 XML 형식이며 링크 된 데이터베이스의 내용이 채워졌습니다.
<configuration> <appsettings> <add key = ""value = ""/> </appsettings> </configuration>
반사를 쓰는 방법 :
Assembly.load ( "현재 어셈블리의 이름"). CreateInstance ( "현재 네임 스페이스의 이름". 인스턴스화 할 클래스 이름);
이 장점은 예를 들어 SQL Server에서 Oracle로 시스템 데이터베이스를 업그레이드하면 데이터베이스를 쉽게 변환 할 수 있다는 것입니다. 그것을 선택하려면 매우 편리합니다.
물론, 여기의 구성 파일이 .properties이고 속성 파일이라고하는 것을 제외하고는 Java에서도 마찬가지입니다. 반사를 통해 내용을 읽으십시오. 이렇게하면 코드가 고정되어 있지만 구성 파일의 내용을 변경하여 코드가 훨씬 유연하게 만듭니다!
요약하면, Java Reflection을 다시 배우고 그것을 유연하게 사용하여 코드를 더욱 유연하게 만들 수 있지만, 단점도 있습니다. 즉, 소프트웨어의 성능을 줄이고 복잡성을 증가시킬 것입니다. 주의하여.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.