1. AOP의 첫인상
우선 좀 더 전문적인 용어를 말씀드리자면 (바이두에서):
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一 维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利 用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效 率。
그럼 비교적 이해하기 쉬운 예를 들어보겠습니다:
측면을 이해하려면 프로그래밍을 하려면 먼저 어떤 측면이 있는지 이해해야 합니다. 칼을 사용하여 수박을 두 부분으로 나누고, 요리할 때 절단면은 냄비와 스토브가 함께 작동하여 요리를 완료하고 냄비와 스토브는 절단면입니다. 웹 계층 설계에서 웹 계층->게이트웨이 계층->서비스 계층->데이터 계층, 각 계층도 하나의 측면입니다. 프로그래밍에는 객체, 메소드 및 메소드, 모듈 사이에 측면이 있습니다.
우리는 일반적으로 활동을 할 때 각 인터페이스에 대한 활동의 유효성(시작 여부, 종료 여부 등)과 이 인터페이스에 사용자 로그인이 필요한지 여부를 확인합니다.
일반적인 논리에 따르면 우리는 이것을 할 수 있습니다.
문제는 인터페이스가 많은 만큼 코드를 여러 번 복사해야 한다는 것입니다. "게으른 사람"에게 이것은 참을 수 없는 일이다. 좋아요, 공개 메소드를 제안하면 각 인터페이스가 이 인터페이스를 호출합니다. 여기는 좀 쫄깃한 면맛이 나요.
저도 문제가 있습니다. 매번 코드를 복사할 필요는 없지만 모든 인터페이스에서 이 메서드를 호출해야 합니다. 그래서 관점이라는 개념이 있고, 인터페이스 호출 어딘가에 메소드를 삽입합니다(포인트 컷).
이런 방식으로 인터페이스는 특정 비즈니스에만 관심을 가지면 되며, 인터페이스의 관심 사항이 아닌 다른 로직이나 처리에는 주의를 기울일 필요가 없습니다.
빨간색 상자는 측면 지향 프로그래밍입니다.
2. AOP의 관련 개념
위의 예를 읽고 나면 누구나 이미 AOP의 대략적인 프로토타입을 갖고 있다고 생각하지만, 위에서 언급한 측면과 같은 용어에 대해서는 약간 모호합니다. AOP의 관련 개념을 설명하겠습니다. AOP의 개념을 이해해야만 AOP의 본질을 이해할 수 있습니다.
다음은 개념에 대한 보다 전문적인 정의입니다.
Aspect: Aspect 선언은 Java의 클래스 선언과 유사하며 Aspect에는 일부 Pointcut과 해당 Advice가 포함됩니다.
조인트 포인트: 일반적으로 메소드 호출, 클래스 멤버에 대한 액세스, 예외 처리 블록 실행 등을 포함하여 프로그램에서 명확하게 정의된 포인트를 나타냅니다. 또한 다른 조인트 포인트 자체를 중첩할 수도 있습니다.
Pointcut(컷 포인트): 조인트 포인트 세트를 나타냅니다. 이러한 조인트 포인트는 논리적 관계를 통해 결합되거나 와일드카드, 정규식 등을 통해 집중됩니다. 해당 Advice가 발생할 위치를 정의합니다.
Advice(enhancement): Advice는 Pointcut에 정의된 프로그램 포인트에서 수행할 특정 작업을 정의합니다. 각 조인트 포인트 이전, 이후 또는 대신에 코드가 실행되는지 구분하기 위해 before, after 및 around를 사용합니다.
Target: Advice로 짜여진 대상 개체입니다.
Weaving: Aspect를 다른 객체에 연결하고 Advised 객체를 생성하는 과정
그런 다음 이해하기 쉬운 예를 들어보세요.
위의 이론적 지식을 읽은 후에도 여전히 문제가 있다고 생각하는 친구들이 있습니다. AOP의 개념이 아직 매우 모호하고, AOP의 다양한 개념이 완전히 이해되지 않았다는 점입니다. 사실 이는 AOP에 개념이 너무 많아서 그 당시에 많은 노력을 기울였기 때문입니다.
AOP에서 Aspect, Joint point, Pointcut 및 Advice의 관계를 비교하기 위해 간단한 예를 들어 보겠습니다.
옛날에 Java라는 작은 카운티가 어둠 속에 있었다고 가정하겠습니다. 그리고 폭풍우가 치는 밤, 이 현에서 살인 사건이 일어났습니다. 살인자는 매우 교활하여 현장에 귀중한 단서를 남기지 않았습니다. 다행히 바로 옆집에서 돌아온 라오 왕이 이 때 우연히 그것을 발견했습니다. 살인을 저지르는 과정에서 시간이 늦어지고 범인이 복면을 쓴 탓에 라오왕은 범인이 남자이고 키가 7피트 5인치 정도라는 것만 알고 있었다. 라오 왕(Lao Wang)의 설명에 따르면, 성문을 지키는 군인들에게 다음과 같은 명령이 내려졌습니다. 키가 7피트 5인치인 사람은 누구든지 체포하여 심문해야 합니다. 물론 군인들은 감히 군의 명령을 거역할 수 없었습니다. 치안판사의 명령에 따라 도시에 출입하는 적격자를 모두 체포해야 했습니다.
위 단편 소설과 AOP 간의 통신을 살펴보겠습니다.
먼저 Spring AOP에서 Joint point는 모든 메소드의 실행 지점을 의미하고, point cut은 Joint point를 수정하는 설명 정보라는 것을 알고 있다. point cut을 통해 어떤 Joint point를 결정할 수 있다. 위에서 제시한 예에 따라 간단한 비유를 할 수 있습니다. 조인트 포인트는 Java의 작은 카운티에 있는 사람들에 해당하고 포인트컷은 Lao Wang의 비난에 해당합니다. 살인자는 남성이고 키가 약 7피트 5인치이며 라오왕의 설명에 부합하는 용의자의 행동에 대한 조언이 적용되었습니다. 심문을 위해 그를 체포하세요.
이것이 가능한 이유 🎜#
Joint point: Java의 작은 카운티에 있는 사람들: 정의에 따르면 Joint point는 Spring AOP에서 모든 메소드로 짜여질 수 있는 모든 후보 포인트이기 때문입니다. 위의 예에서는 작은 카운티에서 살인이 발생했습니다. Pointcut: 남성, 키 약 7피트 5인치: 모든 방법(관절 지점)이 Advice로 짜여질 수 있다는 것을 알고 있지만 모든 방법에 대한 Advice로 짜여지고 싶지는 않습니다. Pointcut의 역할은 다음과 같은 규칙을 제공하는 것입니다. 마찬가지로, 군수에 대해서도 아무리 어리석더라도 군의 모든 사람을 체포하여 심문할 수는 없다는 것을 알고 있습니다. 살인자가 남자이고 키가 약 7피트 5인치라는 사실은 조건을 충족하는 사람들을 체포할 것입니다. 여기서 살인자는 남자이고 그의 키가 약 7피트 5인치라는 것은 범위를 제한하는 수정 술어입니다. 이 수정 규칙을 충족하는 사람들은 용의자이며 체포되어 심문되어야 합니다.#🎜🎜 #조언: 심문을 위해 잡힌 것은 행동, 즉 Java 코드입니다. 코드는 포인트 컷으로 제한된 조인트 포인트에 대해 작동합니다. 같은 방식으로, Catch 심문하러 오는 동작은 남성에게 만족하고 키가 약 7피트 5인치인 소규모 Java 카운티의 사람들을 위한 것입니다.
Aspect:: Aspect는 포인트 컷과 조언의 조합이므로 여기서 비유할 수 있습니다. "Lao Wang의 단서에 따르면 키가 7피트 5인치인 사람은 누구나 체포되고 심문됩니다." 이 전체 작업은 Aspect로 간주될 수 있습니다.
마지막으로 이러한 개념 간의 관계를 설명하는 다이어그램:
3. 일부 기타 내용 Joinpoint는 생성자 호출, 필드 설정 및 검색, 메소드 호출, 메소드 실행, 예외 처리 실행, 클래스 초기화 등 다양한 유형을 가질 수 있습니다. 즉, AOP 개념에서는 위의 Joinpoint에 사용자 정의 Advice를 엮을 수 있지만 위의 모든 Joinpoint가 Spring에서 구현되는 것은 아닙니다. 정확하게 말하면 Spring은 메소드 실행 유형 Joinpoint만 지원합니다.
Advice 유형beforeadvice는 조인포인트 이전에 실행되는 어드바이스이지만, 그러나. 예외가 발생하지 않는 한 조인 포인트의 실행을 막지 않습니다. 즉, 이전 조언 코드에서는 조인 포인트에서 코드를 계속 실행할지 여부를 인위적으로 결정할 수 없습니다. , in 조인 포인트가 정상적으로 반환된 후 실행되는 Advice
advish를 던진 후, 조인 포인트가 예외를 던진 후에 실행되는 Advice
조인 포인트에 관계없이(최종) 조언 이후 정상적으로 종료하든지 예외가 발생하든 실행될 어드바이스입니다.
around 어드바이스, 조인포인트 이전과 조인트포인트가 종료된 후에 실행되는 어드바이스입니다.#🎜 🎜#
Introduction, Introduction은 원본 객체에 새로운 속성과 메소드를 추가할 수 있습니다.위 내용은 Spring 상세설명 - AOP 상세설명(AOP개요)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!