读书人

动态署理要扩展String的Trim()方法

发布时间: 2013-08-10 21:14:06 作者: rapoo

动态代理,要扩展String的Trim()方法
希望使用动态代理扩展String的Trim()方法,实现去掉一个字符串的所有空格。例如“ afaf fa fsdf”
把字符串中间的空格去掉。求思路??
[解决办法]
对String类本身改造操作没希望了,可以考虑在get某个String属性的时候,做个拦截处理,返回的内容为去空格的字符串:str.replaceAll("\\s","");
[解决办法]

引用:
对String类本身改造操作没希望了,可以考虑在get某个String属性的时候,做个拦截处理,返回的内容为去空格的字符串:str.replaceAll("\\s","");

字符串的set方法也同样
[解决办法]
写了个基于JDK的代理demo:
接口类User:

public interface User
{
public void setName(String name);
public String getName();
}


接口实现类UserImpl:

public class UserImpl
implements User
{

private String name;

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}

public String toString()
{
return "User name is:" + name;
}
}


代理类UserProxy:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class UserProxy


implements InvocationHandler
{

private Object target;

/**
* 绑定委托对象并返回一个代理类
* @param target
* @return
*/
public Object bind(Object target)
{
this.target = target;
//取得代理对象
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass()
.getInterfaces(), this); //要绑定接口(这是一个缺陷,cglib弥补了这一缺陷)
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
Object result = null;
System.out.println("代理开始");
//执行方法
System.out.println("Method name is:" + method.getName());
//这里get和set,只要对set拦截就可以了的
/*if (method.getName().contains("getName"))
{
result = method.invoke(target, args);
result = ((String) result).replaceAll("\\s", "");
}
else */
if (method.getName().contains("setName") && null != args[0])
{
String args1 = (String) args[0];
args[0] = args1.replaceAll("\\s", "");
}
result = method.invoke(target, args);
System.out.println("代理结束");
return result;


}
}



测试类TestProxy:

public class TestProxy
{

public static void main(String[] args)
{
UserProxy proxy = new UserProxy();
User user = (User) proxy.bind(new UserImpl());
user.setName("This is Tommy");//入参传的是带空格的
System.out.println(user);//打印的不带空格

String name = user.getName();//取得的也不带空格
System.out.println("User's name is :" + name);

}
}

[解决办法]
楼主可能确实想的太深了 但是善于思考和实践的精神还是不错的

读书人网 >J2EE开发

热点推荐