AOP (Aspect Oriented Programming) 관점지향 프로그래밍
관점지향 프로그래밍은 공통으로 사용하는 기능들을 외부의 독립된 클래스로 분리하고, 해당기능을 프로그램 코드에 직접 명시하지 않고 선언적으로 처리하여 적용하는 것을 말한다.
Advice
: 언제 공통 관심 기능을 핵심 로직에 적용할 지를 정의.
Joinpoint
: Advice를 적용 가능한 지점을 의미. 메서드 호출,
필드 값 변경 등이 Joinpoint에 해당
Pointcut
: Joinpoint의 부분 집합으로서 실제로 Advice가 적용되는 Joinpoint를 나타냄.
Weaving
: Advice를 핵심 로직 코드에 적용하는 것을 weaving이라고 함.
Aspect
:여러 객체에 공통으로 적용되는 공통 관심 사항
XML에 의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- Aspect 설정 : Advice를 어떤 Pointcut에 적용할지 설정 -->
<aop:config>
<aop:aspect id="traceAspect1" ref="performanceTraceAdvice">
<aop:pointcut expression="execution(public * com.spring.board..*(..))"
id="publicMethod"/>
<aop:around method="trace" pointcut-ref="publicMethod"/>
</aop:aspect>
</aop:config>
<bean id="writeArticleService" class="com.spring.board.service.WriteArticleServiceImpl">
<constructor-arg>
<ref bean="articleDao"/>
</constructor-arg>
</bean>
<bean id="articleDao" class="com.spring.board.dao.WriteArticleDao"/>
<aop:config> : AOP 설정 정보임을 나타냄
<aop:aspect> : Aspect를 설정함
<aop:pointcut> : Pointcut을 설정함
<aop:around> : Around Advice를 설정함
종류 | 설명 |
---|---|
<aop:before> | 메서드 실행 전에 적용되는 Advice를 정의한다. |
<aop:after-returning> | 메서드 정상적으로 실행된 후에 적용되는 Advice를 정의한다. |
<aop:after-throwing> | 메서드가 예외를 발생시킬 때 적용되는 Advice를 정의한다. try-catch블록에서 catch 블록과 비슷하다. |
<aop:after> | 메서드가 적상적으로 실행되느니지 또는 예외를 발생시키는지 여부에 상관없이 적용되는 Advice를 정의한다. try-catch-finally에서 finally 블록과 비슷하다. |
<aop:around> | 메서드 호출 이전, 이후, 예외 발생 등 모든 시점에 적용 가능한 Advice를 정의한다. |