@pointcut 예제

이 PCD는 조인 점의 제목에 지정된 어구가 있는 조인 점일치로 일치를 제한합니다. 예를 들어 @Loggable 개의 추가 를 만들 수 있습니다. 해결책은 조언 시그니처가 각 메서드 매개 변수를 순서대로 바인딩하도록 하는 것입니다. 예를 들어 특정 인터페이스를 구현하는 모든 클래스 내에서 메서드 실행 조인 지점을 일치시키고자 하는 경우. 이 예제에서는 이미 ITask를 구현하는 TaskA 클래스가 있습니다. 이제 ITask를 구현하는 다른 클래스 TaskB를 만듭니다. 포인트컷 식에 여러 패키지를 포함하려면 어떻게 해야 합니까? 예: 위에서 언급 한 주석에서 로거 예제를 가져 가라. 폴더 com.example.packages 내의 패키지에있는 모든 메서드 주위에 로거를 원하고 더 중요한 것은 내 상황에 대해 콩이 아닌 클래스를 가로 챌 수 있습니까? 예를 들어 CustomerService 클래스가 비콩 자바 클래스인 경우 해당 메서드 중 하나를 참조하고 가로챌 수 있습니까? 위의 예는 표현식보다는 조언 추가 인수에서 메서드 이름을 사용하는 것이 아니라 매우 분명합니다. 코드가 필요한 디버그 정보 없이 컴파일된 경우 Spring AOP는 매개 변수에 바인딩 변수의 페어링을 추론하려고 시도합니다(예: 하나의 변수만 pointcut 식에 바인딩되고 조언 메서드가 하나만 사용하는 경우). 매개 변수, 페어링은 분명하다!).

사용 가능한 정보가 주어진 변수의 바인딩이 모호한 경우 모호한 BindingException이 throw됩니다. 이전 예제에서는 하위 패키지가 아닌 com.javarticles에서 정의한 클래스만 포함합니다. Spring AOP는 일반 개체 지향 프로그래밍 모델을 통해 달성할 수 없는 클래스에서 교차 절단 작업의 직접 종속성을 제거합니다. 예를 들어 로깅을 위한 별도의 클래스가 있을 수 있지만 함수 클래스는 응용 프로그램 전체에서 로깅을 달성하기 위해 이러한 메서드를 호출해야 합니다. 그런 다음 스프링 컨테이너에 TaskB bean을 선언해야 합니다. 이를 테스트하기 위해 TaskB.doTaskB()를 호출하도록 기본 프로그램을 수정합니다. 예제를 실행하면 AnyMethodOnInterface() 앞에 @Before 조언이 표시되며, 수정자를 사용하여 ITask A 예제를 구현한 모든 클래스가 호출됩니다(Java 5 주석이 상속되지 않으므로 @Pointcut 주석이 있어야 합니다. 확장 측면의 포인트 컷 선언도: 대부분의 경우 (위의 예에서와 같이) 어쨌든이 바인딩을 수행 합니다.

위의 예에서 logBeforeV1()는 join-point 식과 일치하기 때문에 getEmployeeById() 메서드 전에 실행됩니다. 자체적으로 추가를 사용하는 것은 물론 아무 것도 하지 않습니다. 그것은 어노션빈구성자스프링-측면의 측면입니다.jar는 어노의 존재에 작용합니다. 본질적으로 측면은 “@Configurable 개의 추가가 있는 형식의 새 객체의 초기화로부터 돌아온 후, 어노의 특성에 따라 스프링을 사용하여 새로 생성된 객체를 구성한다”고 말합니다.

Comments are closed