반사 메커니즘 의 개념
머리말
반사 메커니즘 의 작용
IOC 용기 의 기술 분석
반사 와 공장 모드 구현 IOC
다음은 반사 메커니즘 으로 공장 모델 을 실현 한다.
요약:
머리말
한 장면 을 고려 하여 프로그램 이 실 행 될 때 한 대상 이 자신 이 가지 고 있 는 구성원 변수 속성 을 검사 하려 면 어떻게 조작 해 야 합 니까?또 다른 장면 은 운행 기간 에 특정한 종류의 Class 정 보 를 얻 으 려 면 속성,구조 방법,일반적인 방법 을 얻 은 후에 대상 을 만 들 지 여 부 를 고려 해 야 합 니 다.이런 상황 은 반사 가 필요 합 니 다!
1)자바 파일 은 컴 파일 한 후에'class 파일'이 됩 니 다.이것 은 마치 거울 과 같 습 니 다.그 자체 가'자바'이 고 거울 에서'class'입 니 다.그들 은 사실 같 습 니 다.마찬가지 로 거울 의 반 사 를 보면'class'로 역 컴 파일 을 통 해'자바 파일 의 본 모습'을 알 수 있다.
2)반사 에 대해 공식 적 으로 제시 한 개념:반 사 는 자바 언어의 한 특성 으로 프로그램 이 실 행 될 때(컴 파일 이 아 닐 때 주의)자체 검 사 를 하고 내부 구성원 을 조작 할 수 있 습 니 다.예 를 들 어 자바 류 가 모든 구성원 변수 와 방법 을 가 져 와 표시 할 수 있 도록 합 니 다.
3)반 사 는 주로 프로그램 이 그 자체 의 상태 나 행 위 를 방문 하고 검 측 하 며 수정 할 수 있 는 능력 을 말 하 며 자신의 행위 의 상태 와 결과 에 따라 설명 한 행위 의 상태 와 관련 된 의 미 를 조정 하거나 수정 할 수 있다.자바 에 서 는 주어진 클래스 의 이름 만 있 으 면 반사 체 제 를 통 해 클래스 의 모든 정 보 를 얻 을 수 있 습 니 다.
4)반 사 는 자바 의 강력 한 도구 로 우 리 를 편리 하 게 유연 한 코드 를 만 들 수 있 습 니 다.이 코드 들 은 다시 실행 할 때 조립 할 수 있 고 구성 요소 간 에 소스 코드 링크 를 하지 않 아 도 됩 니 다.하지만 반사 사용 을 잘못 하면 비용 이 많이 든다!클래스 에 어떤 정보 가 있 는 지 반사 체 제 를 이용 하면 어떤 정 보 를 얻 을 수 있 지만 전 제 는 클래스 의 이름 을 알 수 있다 는 것 이다.
반사 메커니즘 의 작용
1)실행 시 임의의 대상 이 속 한 클래스 를 판단 한다
2)실행 중 클래스 의 대상 가 져 오기
3)실행 중 자바 대상 에 접근 하 는 속성,방법,구조 방법 등
우선 왜 반사 체 제 를 해 야 하 는 지 알 아야 합 니까?이것 은 동태 와 정태 의 개념 에 관련된다.
정적 컴 파일:컴 파일 할 때 형식,바 인 딩 대상,즉 통과.
동적 컴 파일:실행 시 유형,바 인 딩 대상 을 확인 합 니 다.동적 컴 파일 은 자바 의 유연성 을 최대한 발휘 하여 다 중 응용 을 나타 내 고 클래스 간 의 결합 성 을 낮 춘 다.
IOC 용기 의 기술 분석
1)IOC 의 가장 기본 적 인 기술 은'리 플 렉 션(Reflection)'프로 그래 밍 이다.쉽게 말 하면 주어진 클래스(문자열 방식)에 따라 동적 으로 대상 을 생 성 하 는 것 이다.이런 프로 그래 밍 방식 은 대상 이 생 성 될 때 어떤 대상 인지 결정 할 수 있다.다만 spring 에서 생산 할 대상 은 모두 설정 파일 에서 정 의 를 내 렸 는데 그 목적 은 유연성 과 유지 가능성 을 향상 시 키 는 것 이다.
2)현재 C\#,자바,PHP 5 등 언어 는 모두 반 사 를 지원 하고 있 으 며,그 중에서 도 PHP 5 의 기술 서적 에 서 는'맵'으로 번역 되 기도 한다.반사 에 관 한 개념 과 용법 은 모두 가 잘 알 고 있 을 것 이다.반사 응용 은 매우 광범 위 하고 많은 성숙 한 구조 이다.예 를 들 어 자바 중의 Hibernate,Spring 구조 등 이다.NET 중의 NHibernate,Spring.NET 프레임 워 크 는 모두'반사'를 가장 기본 적 인 기술 수단 으로 한다.
3)반사 기술 은 일찍부터 나 타 났 지만 무시 되 었 고 더 이상 이용 되 지 않 았 다.그 당시 의 반사 프로 그래 밍 방식 은 정상 적 인 대상 생 성 방식 에 비해 최소 10 배 느 렸 다.현재 의 반사 기술 은 개량 과 최적화 를 거 쳐 이미 매우 성숙 했다.반사 방식 생 성 대상 과 일반 대상 생 성 방식 은 속도 차이 가 크 지 않다.약 1~2 배의 차이.
4)우 리 는 IOC 용기 의 작업 모델 을 공장 모델 의 승화 로 볼 수 있 고 IOC 용 기 를 공장 으로 볼 수 있다.이 공장 에서 생산 할 대상 은 모두 배치 파일 에서 정 의 를 내 린 다음 에 프로 그래 밍 언어 가 제공 하 는 반사 체 제 를 이용 하여 배치 파일 에 제 시 된 유형 에 따라 해당 하 는 대상 을 생 성 할 수 있다.실현 을 보면 IOC 는 이전에 공장 방법 에 죽은 대상 을 써 서 코드 를 만 들 고 배치 문의 가격 으로 정의 하 는 것 이다.즉,공장 과 대상 을 생 성 한 이 두 가 지 를 독립 적 으로 분리 하 는 것 이다.그 목적 은 유연성 과 유지 가능성 을 향상 시 키 는 것 이다.
반사 와 공장 모드 구현 IOC
Spring 의 IoC 실현 원 리 는 바로 공장 모델 에 반사 체 제 를 가 하 는 것 이다.일단 한번 볼 게 요.반사 기 안 써 도 돼 요.
제 작 된 공장 모델:
interface fruit {
public abstract void eat();
}
class Apple implements fruit{
public void eat(){
System.out.println("Apple");
}
}
class Orange implements fruit{
public void eat(){
System.out.println("Orange");
}
}
//그 러 니까 앞으로 우리 가 다른 인 스 턴 스 를 추가 할 때 공장 류 만 수정 하면 된다 는 거 야.
class Factory{
public static fruit getInstance(String fruitName){
fruit f=null;
if("Apple".equals(fruitName)){
f=new Apple();
} if("Orange".equals(fruitName)){
f=new Orange();
}
return f;
}
}
class hello{
public static void main(String[] a){
fruit f=Factory.getInstance("Orange");
f.eat();
}
}
위의 서법 의 단점 은 우리 가 자 류 를 하나 더 추가 할 때 공장 류 를 수정 해 야 한 다 는 것 이다.만약 우리 가 너무 많은 자 류 를 첨가 할 때,변동 이 매우 많 을 것 이다.
다음은 반사 메커니즘 으로 공장 모델 을 실현 한다.
interface fruit {
public abstract void eat();
}
class Apple implements fruit{
public void eat(){
System.out.println("Apple");
}
}
class Orange implements fruit{
public void eat(){
System.out.println("Orange");
}
}
class Factory{
public static fruit getInstance(String ClassName){
fruit f=null;
try{
f=(fruit)Class.forName(ClassName).newInstance();
}catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
class hello{
public static void main(String[] a){
fruit f=Factory.getInstance("Reflect.Apple");
if(f!=null){
f.eat();
}
}
}
요약:
지금 은 우리 가 여러 개의 자 류 를 추가 하 더 라 도 공장 류 는 수정 할 필요 가 없다.반사 메커니즘 을 사용 하여 실 현 된 작업.
공장 모델 은 반 사 를 통 해 인터페이스의 인 스 턴 스 를 얻 을 수 있 지만 완전한 가방 과 유형 명 을 입력 해 야 한다.그리고 사용자 도 알 수가 없어 요.
하나의 인터페이스 에 사용 할 수 있 는 하위 클래스 가 몇 개 있 기 때문에 우 리 는 속성 파일 형식 으로 필요 한 하위 클래스 를 설정 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
같은 객체 타입간의 할당 = 주소값 복사System 클래스에서 static 변수 in 은 null 로 초기화 되어 있지만, nullPointException 안뜬다. -> InputStream 타입의 객체가 생성되어 in 이 할당되어 있다는 뜻 객체(In...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.