전자정부 프레임워크 값넘기기 연습 (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 를실행하면

 

 

 

 

 

콘솔 결과 값을 볼수 있다.

+ Recent posts