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 |