AOPのTraceInterceptor

来源:互联网 发布:php服务器参数配置 编辑:程序博客网 时间:2024/05/19 14:02

1. TestAop.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC    "-//SEASAR//DTD S2Container 2.3//EN"    "http://www.seasar.org/dtd/components23.dtd">
<components>
    <component name="traceInterceptor"
               class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
    <component name="showLog"
               class="examples.di.main.ShowLog">
        <arg>"ShowLog"</arg> //构造函数注入
    </component>

    <component class="java.util.ArrayList">
        <aspect pointcut="size, hashCode">showLog</aspect>
    </component>
    <component class="java.util.Date">
        <arg>0</arg>
 <aspect pointcut="getTime, hashCode">showLog</aspect>
    </component>
</components>

 

2.ShowLog.java

需要继承自MethodInterceptor或者AbstractInterceptor ,并实现invoke方法

package examples.di.main;

import org.aopalliance.intercept.MethodInvocation;
import org.seasar.framework.aop.interceptors.AbstractInterceptor;
import org.seasar.framework.aop.interceptors.TraceInterceptor;
import org.seasar.framework.log.Logger;

public class ShowLog extends AbstractInterceptor {
 private static final long serialVersionUID = 1L;
 private static final Logger logger = Logger
   .getLogger(TraceInterceptor.class);

 public ShowLog(String methodName) {
  System.out.println(methodName + " is begin");
 }

// public Object invoke(MethodInvocation invocation) throws Throwable {
//  System.out.println("Begin");
//  Object ret = invocation.proceed();
//  System.out.println("End");
//  return ret;
// }
 public Object invoke(MethodInvocation invocation) throws Throwable {
        long start = 0;
        long end = 0;
        StringBuffer buf = new StringBuffer(100);

        buf.append(getTargetClass(invocation).getName());
        buf.append("#");
        buf.append(invocation.getMethod().getName());
        buf.append("(");
        Object[] args = invocation.getArguments();
        if (args != null && args.length > 0) {
            for (int i = 0; i < args.length; ++i) {
                buf.append(args[i]);
                buf.append(", ");
            }
            buf.setLength(buf.length() - 2);
        }
        buf.append(")");
        try {
            start = System.currentTimeMillis();
            Object ret = invocation.proceed();
            end = System.currentTimeMillis();
            buf.append(" : ");
            return ret;
        } catch (Throwable t) {
            buf.append(" Throwable:");
            buf.append(t);
            throw t;
        } finally {
            System.out.println(buf.toString() + (end - start));
        }
    }

}

 

3.TestAop.java

package examples.di.main;

import java.util.Date;
import java.util.List;

import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;


public class TestAop {

    private static final String PATH =
        "TestAop.dicon";

    public static void main(String[] args) {

     S2Container container = S2ContainerFactory.create(PATH);
     container.init();
     List list = (List) container.getComponent(List.class);
     list.size();
     list.clear();
     list.hashCode();
     Date date = (Date) container.getComponent(Date.class);
     date.getTime();
     date.hashCode();
     date.toString();

    }
}

4.运行结果

log4j:WARN No appenders could be found for logger (org.seasar.framework.container.factory.S2ContainerFactory).
log4j:WARN Please initialize the log4j system properly.
ShowLog is begin
java.util.ArrayList#size() : 0
java.util.ArrayList#size() : 0
java.util.ArrayList#hashCode() : 0
java.util.Date#getTime() : 0
java.util.Date#getTime() : 0
java.util.Date#hashCode() : 0

 

原创粉丝点击