AOP(관점 지향 프로그래밍)는 프로그램 구조에 대한 또 다른 사고 방식을 제공하여 객체 지향 프로그래밍(OOP)을 보완합니다. OOP의 모듈화 핵심 단위는 클래스인 반면, AOP의 모듈화 단위는 측면입니다. Aspect를 사용하면 여러 유형과 개체에 걸쳐 문제를 모듈
몇 가지 핵심 AOP 개념과 용어를 정의하는 것부터 시작하겠습니다. 이 용어는 Spring에만 국한되지 않습니다. 불행하게도 AOP 용어는 특별히 직관적이지 않습니다. 그러나 Spring이 자체 용어를 사용한다면 훨씬 더 혼란스러울 것입니다.측면(Aspect): 여러
Spring AOP는 순수 Java로 구현됩니다. 특별한 컴파일 과정이 필요하지 않습니다. Spring AOP는 클래스 로더 계층 구조를 제어할 필요가 없으므로 서블릿 컨테이너 또는 애플리케이션 서버에서 사용하기에 적합합니다.Spring AOP는 현재 메서드 실행 조인
Spring AOP는 기본적으로 AOP 프록시에 대해 표준 JDK 동적 프록시를 사용합니다. 이를 통해 모든 인터페이스(또는 인터페이스 집합)를 프록시할 수 있습니다.Spring AOP는 CGLIB 프록시를 사용할 수도 있습니다. 이는 인터페이스가 아닌 클래스를 프록시
Enabling @AspectJ Support with Java Configuration Enabling @AspectJ Support with Java Configuration
@AspectJ 지원이 활성화되면 @AspectJ 관점(@Aspect 주석 포함)인 클래스를 사용하여 애플리케이션 컨텍스트에 정의된 모든 Bean이 Spring에 의해 자동으로 감지되고 Spring AOP를 구성하는 데 사용됩니다. 다음 두 예는 별로 유용하지 않은 측
포인트컷은 관심 있는 조인 지점을 결정하므로 조언이 실행되는 시점을 제어할 수 있습니다. Spring AOP는 Spring 빈에 대한 메소드 실행 조인 포인트만 지원하므로 포인트컷을 Spring 빈에 대한 메소드 실행과 일치시키는 것으로 생각할 수 있습니다. 포인트컷
조언은 포인트컷 표현식과 연관되어 있으며 포인트컷과 일치하는 메소드 실행 전, 후 또는 주변에서 실행됩니다. 포인트컷 표현식은 인라인 포인트컷이거나 명명된 포인트컷에 대한 참조일 수 있습니다.@Before 주석을 사용하여 관점에서 사전 조언을 선언할 수 있습니다. 다음
소개(AspectJ에서는 유형 간 선언으로 알려짐)를 통해 관점은 어드바이스된 객체가 주어진 인터페이스를 구현한다고 선언하고 해당 객체를 대신하여 해당 인터페이스의 구현을 제공할 수 있습니다.@DeclareParents 주석을 사용하여 소개를 할 수 있습니다. 이 주석
이것은 고급 주제입니다. AOP를 막 시작했다면 나중에 안전하게 건너뛸 수 있습니다.기본적으로 애플리케이션 컨텍스트 내에는 각 측면의 단일 인스턴스가 있습니다. AspectJ는 이것을 싱글톤 인스턴스화 모델이라고 부릅니다. 대체 수명주기로 측면을 정의하는 것이 가능합니
이제 모든 구성 요소가 어떻게 작동하는지 살펴보았으므로 이를 함께 모아 유용한 작업을 수행할 수 있습니다.동시성 문제(예: 교착 상태 패자)로 인해 비즈니스 서비스 실행이 실패하는 경우가 있습니다. 작업을 다시 시도하면 다음 시도에서 성공할 가능성이 높습니다. 이러한
An AOP Schema Example
관점이 주어진 요구사항을 구현하기 위한 최선의 접근 방식이라고 결정했다면 Spring AOP 또는 AspectJ 사용과 Aspect 언어(코드) 스타일, @AspectJ 주석 스타일 또는 Spring XML 스타일 중에서 어떻게 결정합니까? 이러한 결정은 애플리케이션
자동 프록시 지원, 스키마 정의 <aop:aspect> 측면, <aop:advisor> 선언된 권고자, 심지어 동일한 구성에서 다른 스타일의 프록시 및 인터셉터를 사용하여 @AspectJ 스타일 측면을 혼합하는 것이 완벽하게 가능합니다. 이들 모두는 동일한
Spring AOP는 JDK 동적 프록시 또는 CGLIB를 사용하여 주어진 대상 객체에 대한 프록시를 생성합니다. JDK 동적 프록시는 JDK에 내장된 반면 CGLIB는 일반적인 오픈 소스 클래스 정의 라이브러리(spring-core로 다시 패키징됨)입니다.프록시할 대
<aop:config> 또는 <aop:aspectj-autoproxy>를 사용하여 구성에서 측면을 선언하는 것 외에도 대상 객체에 조언하는 프록시를 프로그래밍 방식으로 생성하는 것도 가능합니다. Spring의 AOP API에 대한 자세한 내용은 다음 장을 참