java 反射提取类信息, 动态代理 和过滤某些方法演示
package org.rui.classts.reflects;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.regex.Pattern;
/**
* 提取 类的 方法 构造器
* @author lenovo
*
*/
//{args:ShowMethods}
//查看一个类的所有方法和构造器
public class ShowMethods {
private static String usage="usage:showMethod qualified.class.mane";
private static Pattern p=Pattern.compile("\\w+\\.");
public static void main(String[] args) throws ClassNotFoundException {
//System.out.println(args[0]+" : "+args[1]);
args=new String[1];
args[0]="org.rui.classts.reflects.ShowMethods";
//args[1]="java.awt.Color";
if(args.length<1)
{
System.out.println(usage);
System.exit(0);
}
int lines=0;
Class
c=Class.forName(args[0]);
Method[] m=c.getMethods();
Constructor[] constructor=c.getConstructors();
if(args.length==1)
{
for(Method mt:m)
{
//System.out.println("tostring:"+mt.toString());
//去掉带 点和前面的字符 如 xx.ss.
System.out.println("m1:"+
p.matcher(mt.toString()).replaceAll("")
);
}
//----------------------------------------
for(Constructor con:constructor)
System.out.println("c1:"+
p.matcher(con.toString()).replaceAll("")
);
lines=m.length+constructor.length;
}
else
{
for(Method mt:m)
{
if(mt.toString().indexOf(args[1])!=-1)
{
System.out.println("m2:"+
p.matcher(mt.toString()).replaceAll("")
);
lines++;
}
}
//----------------------------------------
for(Constructor con:constructor)
{
if(con.toString().indexOf(args[1])!=-1)
{
System.out.println("c2:"+
p.matcher(con.toString()).replaceAll("")
);
lines++;
}
}
}
}
}
package org.rui.classts.reflects;
/**
* 简单动态代理 实现
* @author lenovo
*
*/
interface Interface
{
void doSomething();
void somethingElse(String arg);
}
//class------------------
class RealObject implements Interface{
public void doSomething() {
System.out.println("RealObject doSomething");
}
public void somethingElse(String arg) {
System.out.println("RealObject somethingElse:"+arg);
}
}
//class-SimpleProxy-----------------
class SimpleProxy implements Interface{
private Interface proxied;
public SimpleProxy(Interface proxied){this.proxied=proxied;}
//method
public void doSomething() {
System.out.println("SimpleProxy doSomething");
proxied.doSomething();
}
public void somethingElse(String arg) {
System.out.println("SimpleProxy somethingElse:"+arg);
proxied.somethingElse(arg);
}
}
public class SimpleProxyDemo {
public static void consumer(Interface inta)
{
inta.doSomething();
inta.somethingElse("bonobo");
}
//main----------
public static void main(String[] args)
{
//Interface o=new RealObject();
//真实对象去实现
consumer(new RealObject());
//代理去实现
consumer(new SimpleProxy(new RealObject()));
}
}
package org.rui.classts.reflects;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//DynamicProxyHandler
class DynamicProxyHandler implements InvocationHandler{
private Object proxied;
public DynamicPr