삼성SDS_멀티캠퍼스/Spring Frame Work

45일 차 Spring(스프링 프레임워크) AOP 용어정리 및 구현

박성우기 2015. 11. 11. 10:47
반응형




PointCut - 어떤 메소드가 호출되는 시점



Weaving - 다형성에 의한 동적바인딩 
































공통관심사항 코드부터 만들고 (MyAspect 로 명명하겠다)


핵심관심사항이 구현된 객체(Target)를 빈으로 등록

aop:config태그 안에 pointcut정의, advice들을 aspect로 등록












공통관심사항(MyAspect.java)


package aop5;


public class MyAspect {

public void before(){

System.out.println("문을 열고 집에 들어간다");

}

public void after_returning(){

System.out.println("옷 갈아입고 잔다");

}

public void after_thirowing(){

System.out.println("119에 신고한다");

}

public void after(){

System.out.println("문을 열고 집을 나온다");

}

}






그리고 나서 


Target클래스랑 공통관심사항이 적용된 클래스들을 빈으로 등록해보자



<?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"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">



<bean id="boy" class="aop5.Boy"></bean>

<bean id="girl" class="aop5.Girl"></bean>

<bean id="myAspect" class="aop5.MyAspect"></bean>

</beans>


















<?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"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">



<bean id="boy" class="aop5.Boy"></bean>

<bean id="girl" class="aop5.Girl"></bean>

<bean id="myAspect" class="aop5.MyAspect"></bean>


<aop:config>

<aop:pointcut expression="execution (public void aop5.*.doSomething())"

id="pt" />

<aop:aspect ref="myAspect">

<aop:before method="before" pointcut-ref="pt"/>

<aop:after-returning method="after_returning" pointcut-ref="pt"/>

<aop:after-throwing method="after_thirowing" pointcut-ref="pt"/>

<aop:after method="after" pointcut-ref="pt"/>

</aop:aspect>

</aop:config>


</beans>







그리고 동작시키는 Test클래스를 작성하자





위의 사진과 같이 FileSystemXmlApplicationContext로 하면 파일시스템 경로를 통해 xml파일을 찾는다.










그리고 context.getBean( ID값, 인터페이스 클래스)을 사용해야 한다


왜냐면 위빙이 일어날 때 컴파일시점이 아닌 런타임시점에서 코드가 조립되기 때문이다





그렇기에 Boy.class로 하려면 아래그림처럼 해야한다

 







오류가 나기때문에 아래그림처럼 pom.xml에 추가를 하면!










잘된다.




하지만 스프링의 기본정책은 런타임시점이기 때문에


디폴트에 맞게 하자

반응형