-
12장 AOP스프링 프레임워크 기초 공부 2020. 4. 30. 22:55
Aspect oriented programming관점 지향 프로그래밍
1.하나의 프로그램을 관점 이라는 논리적인 단위로 분리하여 관리하는 개념
2.로깅,트랜잭션,보안,캐싱등 다양한 곳에서 다용된다
3.여기에서는 메서드 호출을 관심사로 설정하여 aop에 관한 실습을 진행할것이다.
4.관점을 통해 spring framework가 어떤 메서드가 호출되는지 관심있게 지켜보다가 특정 메서드가 호출되면 자동으로
메서드 전과 후에 다른 메서드가 호출 될 수 있도록 한다.
관점 지향 프로그램
프로그램을 개발할때 관점(관심사)를 설정한다, 해당 관점(관심사)가 수행되는지 지켜보다가 해당 관점이 수행되면 구현되어져있는 다른 작업을 먼저 수행하고 관점을 동작시킨다 반대로 관점을 먼저 수행후 다른 작업을 수행하기도함
spring aop 용어
Joint Point (메서드 호출) (관심사 설정부분)
모듈이 삽입되어 동작하게 되는 특정 위치(메소드 호출등)
Point Cut(전,후)
다양한 Joint Point 중에 어떤 것을 사용할지 선택
Advice(호출된 메서드 전,후 실행될 모듈)
Joint Point 에 삽입되어 동작할 수 있는 코드
- before:메서드 호출 전에 동작하는 advice
- after-returning:예외 없이 호출된 메서드의 동작이 완료되면 동작하는 advice
- ather-throwing:호출된 메서드 동작 중 예외가 발생했을 때 동작하는 advice
- after:예외 발생 여부에 관계없이 호출된 메서드의 동작이 완료되면 동작하는 advice
- around:메서드 호출 전과 후에 동작하는 advice
Weaving(모듈 삽입,호출된 메서드 ,모듈 삽입 세 부분을 하나의 동작으로 만듬 )
Advice를 핵심 로직 코드에 적용하는 것
Aspect
Point Cut+Advice
aop를 사용하기 위해선 라이브러리를 추가해야한다
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${org.aspectj-version}</version> </dependency>
pom.xml에 추가
package kr.co.softcampus.beans; public class TestBean { public void method1() { System.out.println("method1 호출"); } }
package kr.co.softcampus.advisor; import org.aspectj.lang.ProceedingJoinPoint; public class AdvisorClass { public void beforeMethod() { System.out.println("beforeMethod 호출"); } public void afterMethod() { System.out.println("afterMethod 호출"); } public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable { System.out.println("arroundMethod 호출1"); Object obj = pjp.proceed(); System.out.println("arroundMethod 호출2"); return obj; } }
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" 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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id='xml1' class='kr.co.softcampus.beans.TestBean'/> <bean id='advisor1' class='kr.co.softcampus.advisor.AdvisorClass'/> <!-- 관심사 설정 --> <aop:config> <aop:aspect ref='advisor1'> <aop:pointcut id="point1" expression="execution(* method1())"/><!-- 모든 패키지의 모든 클래스의 method1을 호출하는 행위를 관심사로 설정한다 --> <aop:before method="beforeMethod" pointcut-ref="point1"/> <aop:after method="afterMethod" pointcut-ref="point1"/> <aop:around method="aroundMethod" pointcut-ref="point1"/> </aop:aspect> </aop:config> </beans>
package kr.co.softcampus.main; import org.springframework.context.support.ClassPathXmlApplicationContext; import kr.co.softcampus.beans.TestBean; public class MainClass { public static void main(String[] args) { // TODO Auto-generated method stub ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("kr/co/softcampus/config/beans.xml"); TestBean bean1 = ctx.getBean("xml1",TestBean.class); bean1.method1(); ctx.close(); } }
출력값
beforeMethod 호출
arroundMethod 호출1
method1 호출
arroundMethod 호출2
afterMethod 호출'스프링 프레임워크 기초 공부' 카테고리의 다른 글
spring jdbc (0) 2020.05.16 xml namespace (0) 2020.05.01 11장 어노테이션을 이용한 빈 설정 (0) 2020.04.30 10장 자바코드를 활용한 bean 만들기 (0) 2020.04.29 9장 DI 자동주입 (0) 2020.04.27