package org.nutz.aop.asm;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.nutz.Nutzs;
import org.nutz.aop.ClassAgent;
import org.nutz.aop.asm.test.Aop1;
import org.nutz.aop.asm.test.MyMethodInterceptor;
import org.nutz.aop.matcher.MethodMatcherFactory;
import org.nutz.castor.Castors;
import org.nutz.lang.Mirror;
public class Main2 {
public static void main(String[] args) throws Throwable {
ClassAgent agent = new AsmClassAgent();
agent.addInterceptor(MethodMatcherFactory.matcher(".*"), new MyMethodInterceptor());
Class<Aop1> classZ = agent.define(Nutzs.cd(), Aop1.class);
System.out.println(classZ);
Field[] fields = classZ.getDeclaredFields();
for (Field field : fields) {
System.out.println("找到一个Field: " + field);
}
Method methods[] = classZ.getDeclaredMethods();
for (Method method : methods) {
System.out.println("找到一个Method: " + method);
}
Constructor<?>[] constructors = classZ.getDeclaredConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println("找个一个Constructor: " + constructor);
}
Aop1 a1 = Mirror.me(classZ).born("Wendal");
a1.nonArgsVoid();
a1.argsVoid("Wendal is the best!");
a1.mixObjectsVoid("Arg1", new Object(), 1, null);
a1.mixArgsVoid("XX", "WendalXXX", 0, 'c', 1L, 9090L);
a1.mixArgsVoid2("Aop1",
Boolean.TRUE,
8888,
'p',
34L,
false,
'b',
"Gp",
null,
null,
23L,
90L,
78L);
String result = (String) a1.mixArgsVoid4("WendalXXX");
System.out.println("返回值: " + result);
try {
a1.x();
}
catch (Throwable e) {
// TODO: handle exception
}
a1.returnString();
a1.returnLong();
a1.returnBoolean();
a1.returnByte();
a1.returnChar();
a1.returnFloat();
a1.returnShort();
a1.toString();
a1.equals(new Object());
a1.getLog(new StringBuilder("I am OK"));
try {
a1.throwError();
}
catch (Throwable e) {
System.out.println("抓住你:");
e.printStackTrace(System.out);
}
a1.returnObjectArray();
a1.returnLongArray();
a1.returnBooleanArray();
a1.returnByteArray();
a1.returnCharArray();
a1.returnFloatArray();
a1.returnShortArray();
{
// 带异常的构造函数
Constructor<?> constructor = a1 .getClass()
.getConstructor(new Class<?>[]{ Object.class,
Object.class});
System.out.println("构造方法:"
+ constructor
+ " \n带有的异常:"
+ Castors.me().castToString(constructor.getExceptionTypes()));
}
a1.getRunnable();
a1.getEnum();
System.out.println("-Demo Over-");
}
}