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