본문 바로가기

개발/Spring

스프링 AOP(Aspect-Oriented Programming)

728x90
반응형
관점 지향(AOP, Aspect-Oriented Programming)

 

로그기록, 트랜잭션, 예외처리, 이메일 통보 등의 웹 애플리케이션에서 공통으로 사용하는 기능들을 애플리케이션의 주기능을 추가할때마다 일일이 구현해야 될 불편함을 관점 지향 프로그래밍(AOP, Aspect Oriented Programming) 으로 해결할 수 있습니다.

AOP 메서 안의 주기능과 보조 기능을 분리한 후 선택적으로 메서드에 적용해서 사용합니다.
AOP 를 사용하면 전체 코드에 흩어져 있는 보조 기능을 하나의 장소에 모아서 관리할 수 있습니다. 
또 보조 기능을 자신이 원하는 주기능에 선택적으로 적용하 룻 있어 코드가 단순해지고 가독성도 향상됩니다.

 

 

AOP 관련 여러가지 용어

 

용어 설명
aspect 구현하고자 하는 보조 기능을 의미합니다.
advice aspect 의 실제 구현체(클래스)를 의미합니다. 메서드 호출을 기준으로 여러 지점에서 실행됩니다.
jionpoint advice 를 적용하는 지점을 의미합니다. 스프링은 method 의 결합점만 제공합니다.
pointcut advice 가 적용되는 대상을 지정합니다. 패키지이름/클래스이름/메서드이름을 정규식으로 지정하여 사용합니다.
target advice 가 적용되는 클래스를 의미합니다.
weaving advice 를 주기능에 적용하는 것을 의미합니다.

 

 

src 폴더에 xml 파일을 생성하여 작성합니다.

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
   "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
   <!-- 타깃 클래스 빈 지정 -->
   <bean id="calcTarget" class="com.spring.ex01.Calculator" />
   <!-- 로그 기능을 하는 어드바이스 지정 -->
   <bean id="logAdvice" class="com.spring.ex01.LoggingAdvice" />
   
   <!-- 스프링에서 제공하는 ProxyFactoryBean 을 이용해 타깃과 어드바이스를 엮어줌 -->
   <bean id="proxyCal"
          class="org.springframework.aop.framework.ProxyFactoryBean">
      <!-- 타깃 빈을 calcTarget 빈으로 지정 -->
      <property name="target" ref="calcTarget"/>
      <!-- 스프링의 ProxyFactoryBean 의 interceptorNames 속성에 logAdvide 를 어드바이스 빈으로 설정하여 타깃 클래스의 메서드 호출 시 lodAdvice 를 실행 -->
      <property name="interceptorNames">
         <list>
            <value>logAdvice</value>
         </list>
      </property>
   </bean>
</beans>

 

현재 설정은 타깃 클래스인 Calculator 의 모든 메서드에 적용됩니다.

실제 스프링에서는 특정 패키지 이름이나 특정 클래스 이름 또는 특정 메서드 이름에만 AOP 기능을 적용할 수 있습니다.

 

여기까지 임미다.

728x90

'개발 > Spring' 카테고리의 다른 글

메이븐(Maven) 구성요소  (0) 2022.11.17
스프링 @Autowired  (0) 2022.11.16
스프링 애너테이션(Annotation)  (0) 2022.11.16
스프링 트랜잭션(Transaction)  (0) 2022.11.16
스프링 마이바티스 연동  (0) 2022.11.16
마이바티스(Mybatis)  (0) 2022.11.15
스프링 JDBC(Java Database Connectivity)  (0) 2022.11.15
스프링 MVC(Model - View - Controller)  (0) 2022.11.15
스프링 프레임워크란?  (0) 2022.11.15
스프링 DI(Dependency Injection)  (0) 2022.11.15