日期:2014-05-18  浏览次数:20680 次

动态代理,要扩展String的Trim()方法
希望使用动态代理扩展String的Trim()方法,实现去掉一个字符串的所有空格。例如“  afaf fa   fsdf”
把字符串中间的空格去掉。求思路??

------解决方案--------------------
String是被final修饰的类,不能用cglib实现子类代理,又没有父接口,所以无论用jdk的实习接口代理。所以也许我知识有限,真没想出什么方法实现string的动态代理。如果只是lz上面的需求,完全没有用动态代理的方法去实现。随便写个工具类很容易实现的。lz好好理理动态代理技术的用途吧!为了扩展一个方法,复制一整个对象,这未免太过浪费
------解决方案--------------------
这个问题很简单啊! 你去看看 StringUtils 这类啊. 里面的方法会让你很吃惊的...
------解决方案--------------------
对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