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

水诺善兮 2013-07-28 11:18:16
希望使用动态代理扩展String的Trim()方法,实现去掉一个字符串的所有空格。例如“ afaf fa fsdf”
把字符串中间的空格去掉。求思路??
...全文
209 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaguaanfanga 2013-07-29
  • 打赏
  • 举报
回复
String是被final修饰的类,不能用cglib实现子类代理,又没有父接口,所以无论用jdk的实习接口代理。所以也许我知识有限,真没想出什么方法实现string的动态代理。如果只是lz上面的需求,完全没有用动态代理的方法去实现。随便写个工具类很容易实现的。lz好好理理动态代理技术的用途吧!为了扩展一个方法,复制一整个对象,这未免太过浪费
liangtu 2013-07-29
  • 打赏
  • 举报
回复
引用 3 楼 ticmy 的回复:
要实现的功能与动态代理有毛关系?
同理,高射炮打蚊子!
oh_Maxy 2013-07-29
  • 打赏
  • 举报
回复
写了个基于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);
        
    }
}
oh_Maxy 2013-07-29
  • 打赏
  • 举报
回复
引用 5 楼 oh_Maxy 的回复:
对String类本身改造操作没希望了,可以考虑在get某个String属性的时候,做个拦截处理,返回的内容为去空格的字符串:str.replaceAll("\\s","");
字符串的set方法也同样
oh_Maxy 2013-07-29
  • 打赏
  • 举报
回复
对String类本身改造操作没希望了,可以考虑在get某个String属性的时候,做个拦截处理,返回的内容为去空格的字符串:str.replaceAll("\\s","");
  • 打赏
  • 举报
回复
楼主的意思应该是aop的概念,过滤所有string的空格吧?和代理没啥关系。
龙四 2013-07-29
  • 打赏
  • 举报
回复
要实现的功能与动态代理有毛关系?
zyrobert 2013-07-29
  • 打赏
  • 举报
回复
楼主可能确实想的太深了 但是善于思考和实践的精神还是不错的
Αμπάι. 2013-07-29
  • 打赏
  • 举报
回复
这个问题很简单啊! 你去看看 StringUtils 这类啊. 里面的方法会让你很吃惊的...

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧