애스펙트 J

AspectJ
애스펙트 J
패러다임측면 지향의
개발자이클립스 재단
처음 등장한2001(2001)
안정된 릴리스
2021년 6월 24일[1] 1.9.7, 13개월 전 (6월 24일)
구현 언어자바
OS크로스 플랫폼
면허증.이클립스 퍼블릭 라이선스
파일 이름 확장자아지
웹 사이트www.eclipse.org/aspectj/
주요 구현
Eclipse용 AspectJ 개발 도구

AspectJ는 Java 프로그래밍 언어용으로 PARC에서 작성AOP(Aspect-Oriented Programming) 확장입니다.Eclipse Foundation 오픈 소스 프로젝트에서 사용할 수 있으며, 독립 실행형 및 Eclipse에 통합됩니다.Aspect J는 최종 사용자에게 심플함과 조작성을 강조함으로써 사실상의 AAP 표준으로 널리 사용되고 있습니다.Java와 유사한 구문을 사용하며 2001년 최초 공개 이후 크로스컷 구조를 표시하기 위한 IDE 통합이 포함되어 있습니다.

간단한 언어 설명

유효한 Java 프로그램도 모두 유효한 AspectJ 프로그램이지만, AspectJ는 프로그래머가 Aspects라고 불리는 특별한 구조를 정의할 수 있도록 합니다.측면에는 표준 클래스에서 사용할 수 없는 여러 엔티티가 포함될 수 있습니다.다음과 같습니다.

확장 방식
프로그래머가 애스펙트 내에서 메서드, 필드 또는 인터페이스를 기존 클래스에 추가할 수 있도록 합니다.이 예에서는 다음 명령어를 추가합니다.acceptVisitor(방문자 패턴 참조) 메서드는Point클래스:
측면 Visit Aspect(방문 예상) {   무효 포인트.acceptVisitor(방문자 수락)(방문자 v) {     v.방문하다(이것.);   } } 
포인트 컷
프로그래머가 조인 포인트(메서드 호출, 객체 인스턴스화, 변수 액세스 등 프로그램 실행 시 잘 정의된 순간)를 지정할 수 있도록 합니다.모든 포인트 컷은 지정된 결합점이 일치하는지 여부를 결정하는 식(양자화)입니다.예를 들어, 이 포인트 컷은 유형 객체의 인스턴스 메서드 실행과 일치합니다.Point그 이름은 로 시작된다.set:
포인트 컷 세트() : 실행(* 세트*(..) ) & & 이것.(포인트); 
어드바이스
프로그래머가 점절단과 일치하는 결합 지점에서 실행할 코드를 지정할 수 있습니다.액션은 지정된 결합점 전, 또는 주변에서 수행할 수 있습니다.여기서 조언은 무언가를 켤 때마다 디스플레이를 새로 고칩니다.Point위에서 선언한 포인트 컷을 사용하여 설정합니다.
끝나고 () : 세트() {   표시.갱신하다(); } 

Aspect J는 포인트 컷 기반의 정적 체크와 (상속에 의한) 애스펙트 재사용의 제한된 형태도 지원합니다.언어에 대한 자세한 설명은 AspectJ 프로그래밍 가이드를 참조하십시오.

Aspect J 호환성 및 구현

AspectJ는 소스위칭 또는 바이트코드위칭다양한 방법으로 가상머신(VM)에 직접 구현할 수 있습니다.어느 경우든 AspectJ 프로그램은 Java VM에서 실행되는 유효한 Java 프로그램이 됩니다.측면의 영향을 받는 클래스는 영향을 받지 않는 클래스와 이진 호환됩니다(영향을 받지 않은 원본으로 컴파일된 클래스와 호환성을 유지하기 위해).복수의 실장을 서포트하는 것으로, 테크놀로지의 변화에 맞추어 언어를 확장할 수 있습니다.또, Java 와 호환성이 있기 때문에, 플랫폼의 가용성이 보증됩니다.

그 성공의 열쇠는 언어를 사용할 수 있게 하고 프로그램을 도입할 수 있게 하는 엔지니어링과 언어의 결정이었습니다.원래의 Xerox AspectJ 실장에서는 소스 코드 액세스가 필요한 소스 위빙을 사용했습니다.Xerox가 코드를 Eclipse에 제공했을 때, Eclipse Java 컴파일러와 BCEL 기반의 바이트 코드 위버를 사용하여 AspectJ가 재실장되어 개발자들이 코드에 대한 부분을 바이너리(.class) 형식으로 쓸 수 있게 되었습니다.이때 AspectJ 언어는 증분 컴파일 및 부하 시간 위빙에 필수적인 클래스별 모델을 지원하기 위해 제한되었습니다.이를 통해 IDE 통합은 Java 통합과 마찬가지로 응답성이 높아졌으며, 개발자는 빌드 프로세스를 변경하지 않고도 측면을 구현할 수 있었습니다.이로 인해 AspectJ는 성급한 Java 프로그래머와 엔터프라이즈 레벨의 도입에 사용할 수 있게 되면서 채택이 증가했습니다.그 후 Eclipse 팀은 성능과 정확성을 향상시키고, 범용 및 주석과 같은 Java 5 언어 기능을 지원하도록 AspectJ 언어를 업그레이드했으며, AspectWerkz의 주석 스타일 순수 자바 측면도 통합했습니다.

Eclipse 프로젝트는 명령줄 인터페이스와 개미 인터페이스를 모두 지원합니다.관련된 Eclipse 프로젝트는 AspectJ(AspectJ Development Tools(AJDT)라고 불리는 Eclipse IDE 지원 및 기타 횡단 구조 공급자를 위한 Eclipse IDE 지원을 꾸준히 개선해 왔습니다.emacs, NetBeansJBuilder에 대한 IDE 지원은 Xerox가 오픈 소스에 넣었을 때 중단되었지만 Oracle의 JDeveloper에 대한 지원은 제공되었습니다.IDE 지원은 AspectJ를 사용하여 교차 우려 사항을 이해하는 Java 프로그래머에게 핵심이었습니다.

BEA는 애스펙트 지향 확장에 대해 제한된 VM 지원을 제공했지만 모든 Java VM에서 지원되는 확장에 대해서는 Sun의 Java Community Process를 통해 동의해야 합니다(JVM 로드 타임 계측의 공통 기반인 Java SE 5 이후 사용 가능한 java.lang.instrument 패키지 참조).

애스펙트 지향 언어의 의미론 및 구현에 대한 학술적 관심은 출시 이후 AspectJ를 둘러싸고 있다.AspectJ의 주요 연구 구현은 AspectBench 컴파일러, abc입니다.AspectJ는 언어의 구문과 의미론을 변경하기 위한 확장을 지원하며 광범위한 사용자 기반을 고려할 때 AspectJ 팀이 더 이상 지원할 수 없는 많은 AOP 실험의 기반을 형성합니다.

많은 프로그래머가 다른 프로젝트, 특히 Spring AOP를 가능하게 하는 테크놀로지로 Aspect J를 발견합니다.자매 Spring 프로젝트인 Spring Roo는 주요 코드 생성 출력으로 AspectJ 유형선언을 자동으로 유지합니다.

이력 및 기여자

Gregor Kiczales는 최종적으로 AspectJ를 개발한 Xerox PARC 팀을 시작하고 이끌었습니다.는 크로스컷이라는 용어를 만들었다.의 네 번째인 Chris Maeda는 애스펙트 지향 프로그래밍이라는 용어를 만들었습니다.Jim Hugunin과 Erik Hilsdale(Xerox PARC 팀원 12 및 13)은 오리지널 컴파일러 및 위버 엔지니어였고, Mik Kersten은 IDE 통합을 구현하여 Adrian Colyer(현 AspectJ 프로젝트 리더) Andrew Clement(현 컴파일러 엔지니어)와 함께 Eclipse AJDT 프로젝트시작했습니다.

AspectBench 컴파일러는 Oxford University Computing LaboratoryProgramming Tools Group, McGill University의 Sable Research Group 및 Institute for Basic Research in Computer Science(BRICS)의 공동 작업으로 개발되어 유지되고 있습니다.

Aspect Werkz

AspectWerkz는 Java용 동적 경량 고성능 AOP/AOSD 프레임워크입니다.AspectJ 5부터 AspectWerkz 기능을 지원하는 AspectJ 프로젝트와 통합되었습니다.

Jonas Boner와 Alex Vasseur는 AspectWerkz 프로젝트를 설계했으며, 이후 AspectWerkz 주석 스타일과 로드타임 위빙 지원으로 병합하여 AspectJ 프로젝트에 기여했습니다.

버전 5 이전의 AspectJ와 달리, AspectWerkz는 Java에 새로운 언어 구조를 추가하지 않고 Java 주석 에서 Aspect 선언을 지원했습니다.바이트 코드 수정을 사용하여 프로젝트 빌드 시간, 클래스 로드 시간 및 런타임에 클래스를 위빙합니다.표준화된 JVM 수준[clarify] API를 사용합니다.애스펙트는 Java 주석(Java 5에서 도입), Java 1.3/1.4 커스텀 문서 또는 단순한 XML 정의 파일을 사용하여 정의할 수 있습니다.

AspectWerkz는 프록시에 대해 동일한 측면을 사용하는 API를 제공하므로 프록시에 익숙한 사용자가 원활하게 전환할 수 있습니다.

Aspect Werkz는 무료 소프트웨어입니다.LGPL 스타일의 라이선스는 상용 프로젝트와 오픈 소스 프로젝트 모두에서 AspectWerkz 2.0을 사용할 수 있도록 합니다.

「 」를 참조해 주세요.

레퍼런스

  • Laddad, Ramnivas (September 28, 2009), AspectJ in Action: Enterprise AOP with Spring (2nd ed.), Manning Publications, p. 550, ISBN 978-1-933988-05-4
  • Miles, Russ (December 20, 2004), AspectJ Cookbook (1st ed.), O'Reilly Media, p. 354, ISBN 978-0-596-00654-9
  • Colyer, Adrian; Clement, Andy; Harley, George; Webster, Matthew (December 24, 2004), Eclipse AspectJ: Aspect-Oriented Programming with AspectJ and the Eclipse AspectJ Development Tools (1st ed.), Addison-Wesley Professional, p. 504, ISBN 978-0-321-24587-8
  • Gradecki, Joseph D.; Lesiecki, Nicholas (March 7, 2003), Mastering AspectJ: Aspect-Oriented Programming in Java (1st ed.), Wiley, pp. 456, ISBN 978-0-471-43104-6

외부 링크

  1. ^ https://github.com/eclipse/org.aspectj/releases/tag/V1_9_7; 발행일 : 2021년 6월 24일, 취득일 : 2021년 12월 29일.