반응형
AOP 용어 정리
- aspect : 관심사라는 의미로 같은 관심사별 공통 모듈을 담고 있는 그룹 또는 클래스를 의미
- target : aspect를 적용할 클래스 또는 메소드를 의미함
- advice : 실질적으로 어떤 일을 해야할 지에 대한 것으로 부가 기능을 담을 구현체
- joinpoint : 공통기능이 적용되어야 하는 핵심 기능의 시점
- pointcut : joinpoint의 상세한 스펙을 의미
현재 클래스는 여러가지 공통 모듈(메소드)을 관리하는 클래스
aop 사용시 공통 관심사 별로 클래스를 분류 기능들을 메소드로 관리하게 된다
aop 프로그래밍을 하기 위해서는 aspect과 target 전부 ioc 컨테이너가 생성한 객체들끼리만 적용이 가능하다
pom.xml 에 밑의 코드 추가
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
xml 파일의 Namespaces에서 aop, context 체크
package aopEx01;
public class Aop {
//핵심 로직 실행 전에 호출될 공통 모듈
public void beforeAdvice() {
System.out.println("핵심 로직 실행 전에 호출되는 공통 모듈");
}
}
package aopEx01_target1;
import org.springframework.stereotype.Component;
@Component
public class A {
public void method() {
System.out.println("A 클래스 method의 핵심 로직");
}
public void method2() {
System.out.println("A 클래스 method2의 핵심 로직");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
<bean id="aop" class="aopEx01.Aop" /> <!-- aspect 클래스 객체 생성 -->
<aop:config><!-- aop 설정 정보 영역 -->
<aop:aspect id="aop1" ref="aop"><!-- ioc 보유 객체 중 aspect 등록 -->
<!-- within() : 클래스 단위로 사용 가능 -->
<aop:pointcut expression="within(aopEx01_target1.*)" id="pointcut01"/><!-- target 상세 정보 등록 -->
<aop:before method="beforeAdvice" pointcut-ref="pointcut01"/>
</aop:aspect>
</aop:config>
<context:component-scan base-package="aopEx01_target1" />
</beans>
joinpoint 세가지(세부적으로는 5가지)
joinpoint 세가지(세부적으로는 5가지)
1.before : 핵심로직 실행 전
2.after : 핵심로직 실행 후
2-1. after-throwing : 핵심로직 실행 시 에러발생 후
2-2. after-returning: 핵심로직 정상 종류 후
3.around : 핵심로직 실행 전 후(오류발생해도 안해도 무조건 실행)
package aopEx01_main;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import aopEx01.Aop;
import aopEx01_target1.A;
public class Main {
public static void main(String[] args) {
A a = new A();
a.method();
a.method2();
System.out.println("---------------------");
AbstractApplicationContext ctx =
new GenericXmlApplicationContext("classpath:applicationcontext.xml");
A aop = ctx.getBean("a",A.class);
aop.method();
aop.method2();
}
}
반응형
'Spring' 카테고리의 다른 글
[Spring] 스프링 MVC 프로젝트 (0) | 2024.11.24 |
---|---|
[Spring] AOP 어노테이션 (0) | 2024.11.23 |
[Spring] joinpoint (0) | 2024.11.22 |
[Spring] 어노테이션(@) (0) | 2024.11.20 |
[Spring] 스프링 프레임워크, 세터주입, 생성자 주입, 의존성 주입 (0) | 2024.11.18 |