전자정부 프레임워크 값넘기기 연습 (9) AOP 테스트
1. 컨트롤러에 매핑 추가
@Autowired
Hello myH;
@RequestMapping("/myaop.do")
public String myaop(Model model) throws Exception {
//int n = myH.method1();
//System.out.println("n="+n);
//myH.method1();
String s = myH.testA();
System.out.println(s);
return "test";
}
-------------------------------------------------------------------
2. webapp - WEB-INF - jsp - egovframework - example 경로에
test.jsp 파일을 만들고 아래의 코드를 입력
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1> test .....</h1>
</body>
</html>
------------------------------------------------------------------------
3. pom.xml에 다음 코드 추가
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
---------------------------------------------------------------------------------------------
4. webapp 경로 아래에
test.html 파일을 만들고 아래의 코드를 입력
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>hello</h1>
</body>
</html>
------------------------------------------------------------------------------------------------
5. my.aoptest 패키지 경로에
Hello.java 파일 생성후 아래의 코드 입력
package my.aoptest;
public class Hello {
public String testA() {
System.out.println("testA call");
return "testA return";
}
public String testB() {
System.out.println("testB call");
return "testB return";
}
public int method1() {
System.out.println("method1 call");
return 100;
}
}
----------------------------------------------------------------------------
6. egovframework.example.sample.web 패키지 경로에
AdvisorClass.java 파일 생성후 아래의 코드 입력
package egovframework.example.sample.web;
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("aroundMethod 호출1");
// 원래의 메서드를 호출한다.
Object obj = pjp.proceed();
System.out.println("aroundMethod 호출 2:"+obj);
return obj;
}
public void afterReturningMethod() {
System.out.println("afterReturningMethod 호출");
}
public void afterThrowingMethod(Throwable e1) {
System.out.println("afterThrowingMethod 호출");
System.out.println(e1);
}
}
---------------------------------------------------------------------
7. egovframework.example.sample.web 패키지 경로에
MyAdvice.java 파일 생성후 아래의 코드 입력
package egovframework.example.sample.web;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.util.StopWatch;
@Aspect
@Component
public class MyAdvice {
StopWatch stopWatch = new StopWatch();
//@Before("execution(* my.aoptest.*.*(..))")
@Before("execution(* my.aoptest.Hello.test*(..))")
public void before()
{
System.out.println("before.... time");
stopWatch.start();
}
@After("execution(* my.aoptest.Hello.test*(..))")
public void after()
{
System.out.println("after");
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
}
// @Around("execution (* my.aoptest.*.*(..))")
// public Object time(ProceedingJoinPoint pjp) {
// System.out.println("around start");
// Object result = null;
// try {
// //...
// result=pjp.proceed(); // testA()
// System.out.println("result="+result);
// //...
// }catch (Throwable e) {
// e.printStackTrace();
// }
// System.out.println("around end");
// return result;
// }
}
----------------------------------------------------------------------------------
8. webapp - WEB-INF - config - egovframework - springmvc -
dispatcher-servlet.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<context:component-scan base-package="egovframework">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<bean id="myH" class="my.aoptest.Hello"></bean>
<bean id="advisor1" class="egovframework.example.sample.web.AdvisorClass"></bean>
<aop:config>
<aop:aspect ref='advisor1'>
<aop:pointcut id="point1"
expression="execution(* method1())" />
<aop:before method="beforeMethod" pointcut-ref="point1" />
<aop:after method="afterMethod" pointcut-ref="point1"/>
<aop:around method="aroundMethod" pointcut-ref="point1" />
<!-- <aop:after-returning method="afterReturningMethod" pointcut-ref="point1"/> -->
<!-- <aop:after-throwing method="afterThrowingMethod" pointcut-ref="point1" throwing="e1"/> -->
</aop:aspect>
</aop:config>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer">
<bean class="egovframework.example.cmmn.web.EgovBindingInitializer"/>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
<!-- 쿠키를 이용한 Locale 이용시 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/> -->
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="cmmn/egovError"/>
<property name="exceptionMappings">
<props>
<prop key="org.springframework.dao.DataAccessException">cmmn/dataAccessFailure</prop>
<prop key="org.springframework.transaction.TransactionException">cmmn/transactionFailure</prop>
<prop key="org.egovframe.rte.fdl.cmmn.exception.EgovBizException">cmmn/egovError</prop>
<prop key="org.springframework.security.AccessDeniedException">cmmn/egovError</prop>
</props>
</property>
</bean>
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/egovframework/example/" p:suffix=".jsp"/>
<!-- For Pagination Tag -->
<bean id="imageRenderer" class="egovframework.example.cmmn.web.EgovImgPaginationRenderer"/>
<bean id="paginationManager" class="org.egovframe.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager">
<property name="rendererType">
<map>
<entry key="image" value-ref="imageRenderer"/>
</map>
</property>
</bean>
<!-- /For Pagination Tag -->
<mvc:view-controller path="/cmmn/validator.do" view-name="cmmn/validator"/>
</beans>
-------------------------------------------------------------------------------------------
9. 실행
http://localhost:8086/testAOP/myaop.do 를실행하면
콘솔 결과 값을 볼수 있다.
'IT 및 공부 > Spring & JSP & PHP' 카테고리의 다른 글
전자정부 프레임워크 값넘기기 연습 (10) MyBatis 테스트 (0) | 2022.08.24 |
---|---|
전자정부 프레임워크 값넘기기 연습 (8) (0) | 2022.08.24 |
전자정부 프레임워크 값넘기기 연습 (7) (0) | 2022.08.24 |
전자정부 프레임워크 값넘기기 연습 (6) (0) | 2022.08.24 |
전자정부 프레임워크 값넘기기 연습 (5) (0) | 2022.08.23 |