본문 바로가기
Java . Spring . Web . SQL

AOP 용어 및 기본 설정 - 예제

by heidish 2020. 10. 12.
반응형

 

 

 

 

 

 

교재 P157-

 

 

 

 


 

Joinpoint  &  Pointcut

 

 

 

 

기존의 applicationContext.xml 에서 코드 추가

 

 

*  applicationContext.xml

<?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-4.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

	<context:component-scan base-package="com.heidi.biz"></context:component-scan>
	
	<bean id="log" class="com.heidi.biz.board.common.LogAdvice"></bean>
	
	<aop:config>
		<aop:pointcut expression="execution(* com.heidi.biz..*Impl.*(..))" id="allPointcut"/>
		<aop:pointcut expression="execution(* com.heidi.biz..*Impl.get*(..))" id="getPointcut"/>
		<aop:aspect ref="log">
			<aop:before method="printLog" pointcut-ref="getPointcut" />
		</aop:aspect>
	</aop:config>

</beans>

 

 

*  BoardServiceClient.java

메인클래스 실행

 

 

 

실행 결과

INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@7dc5e7b4: startup date [Mon Oct 12 10:09:48 KST 2020]; root of context hierarchy
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
==> JDBC로 insertBoard() 기능 처리
[공통로그] 비즈니스 로직 수행 전 동작
==> JDBC로 getBoardList() 기능 처리
==> BoardVO [seq=11, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=10, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=9, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=8, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=7, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=6, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=5, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=4, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=3, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=2, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-08, cnt=0]
==> BoardVO [seq=1, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-07, cnt=0]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@7dc5e7b4: startup date [Mon Oct 12 10:09:48 KST 2020]; root of context hierarchy

applicationContext.xml 문서의 코드에서,

<aop:config> 태그 내부의 <aop:aspect ~> 태그의, <aop:before ~> 태그에서,

pointcut-ref="getPointcut" 을 통해서 관점을 getPointcut 로 바꿔놨기 때문에,

 

get~ 메서드 호출 직전에만 Log값이 찍히는걸 확인할 수 있다.

 

 


 

이번엔 applicationContext.xml 에서, 

<aop:aspect> 태그 내의 <aop:before ~> 태그를 <aop:after ~> 태그로 바꾸고 실행해보면,

 

*  applicationContext.xml

<?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-4.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

	<context:component-scan base-package="com.heidi.biz"></context:component-scan>
	
	<bean id="log" class="com.heidi.biz.board.common.LogAdvice"></bean>
	
	<aop:config>
		<aop:pointcut expression="execution(* com.heidi.biz..*Impl.*(..))" id="allPointcut"/>
		<aop:pointcut expression="execution(* com.heidi.biz..*Impl.get*(..))" id="getPointcut"/>
		<aop:aspect ref="log">
			<aop:after method="printLog" pointcut-ref="getPointcut" />
		</aop:aspect>
	</aop:config>

</beans>

 

실행 결과

INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@7dc5e7b4: startup date [Mon Oct 12 10:12:48 KST 2020]; root of context hierarchy
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
==> JDBC로 insertBoard() 기능 처리
==> JDBC로 getBoardList() 기능 처리
[공통로그] 비즈니스 로직 수행 전 동작
==> BoardVO [seq=12, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=11, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=10, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=9, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=8, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=7, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=6, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=5, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=4, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=3, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-12, cnt=0]
==> BoardVO [seq=2, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-08, cnt=0]
==> BoardVO [seq=1, title=임시 제목, writer=전소현, content=임시내용, regDate=2020-10-07, cnt=0]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@7dc5e7b4: startup date [Mon Oct 12 10:12:48 KST 2020]; root of context hierarchy

get~ 메서드 호출 직후, 로그가 찍히는걸 콘솔창에서 확인할 수 있다.

 

 

 


 

 

 

 

 

반응형

댓글