TestCode:
Code Import Java. Lang. Reflect. method;
Import Java. util. calendar;
Import Java. util. date;
ImportNet. SF. cglib. Beans. beanmap;
ImportNet. SF. cglib. Proxy. enhancer;
ImportNet. SF. cglib. Proxy. methodinterceptor;
ImportNet. SF. cglib. Proxy. methodproxy;
Public Class Testperformance
{
Public Static Void Main (string [] ARGs)
{
Int Times = 10000000 ;
// Testbean (times ); // = 15
// Testcglib (times ); // = 516
// Testbeanmap (times ); // = 256
Testreflection (times ); // = 11359
}
Public Static VoidTestbean (IntTimes)
{
Mybean Bean= NewMybean ();
Date start = Calendar. getinstance (). gettime ();
For ( Int I = 0 ; I < Times; I ++ )
{
Bean. setname ( " Helloworld " );
Object v = Bean. getname ();
}
Date end=Calendar. getinstance (). gettime ();
System. Out. println (end. gettime ()-Start. gettime ());
}
Public Static Void Testcglib ( Int Times)
{
Enhancer Enhancer = New Enhancer ();
Enhancer. setsuperclass (mybean. Class );
Enhancer. setcallback ( New Testmethodinterceptorimpl ());
Mybean my = (Mybean) enhancer. Create ();
Date start = Calendar. getinstance (). gettime ();
For ( Int I = 0 ; I < Times; I ++ )
{
My. setname ( " Helloworld " );
Object v = My. getname ();
}
Date end=Calendar. getinstance (). gettime ();
System. Out. println (end. gettime ()-Start. gettime ());
}
Public Static VoidTestbeanmap (IntTimes)
{
Mybean Bean= NewMybean ();
Beanmap Map=Beanmap. Create (bean );
Date start = Calendar. getinstance (). gettime ();
For ( Int I = 0 ; I < Times; I ++ )
{
Map. Put (bean, " Name " , " Helloworld " );
Object v = Bean. getname ();
}
Date end = Calendar. getinstance (). gettime ();
System. Out. println (end. gettime ()-Start. gettime ());
}
Public Static Void Testreflection ( Int Times)
{
Mybean Bean = New Mybean ();
Class C = Mybean. Class ;
Try
{
Method get = C. getdeclaredmethod ( " Getname " , Null );
Method set = C. getdeclaredmethod ( " Setname " , String. Class );
Date start = Calendar. getinstance (). gettime ();
For ( Int I = 0 ; I < Times; I ++ )
{
Set. Invoke (bean, " Helloworld " );
Object v = Get. Invoke (bean, Null );
}
Date end = Calendar. getinstance (). gettime ();
System. Out. println (end. gettime ()-Start. gettime ());
}Catch(Exception ex)
{
}
}
}
class testmethodinterceptorimpl implements methodinterceptor
{< br> Public Object intercept (Object OBJ, method, object [] ARGs,
methodproxy proxy) throws throwable
{< br> return proxy. invokesuper (OBJ, argS);
}< BR >}
ClassMybean
{
PrivateString name;
PublicString getname ()
{
ReturnName;
}
Public VoidSetname (string name)
{
This. Name=Name;
}
}
Test results:
Direct value assignment = 15
Cglib. Proxy = 516
Cglib. beanmap = 256
Reflection = 11359