首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

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

2013-08-10 
动态代理,要扩展String的Trim()方法希望使用动态代理扩展String的Trim()方法,实现去掉一个字符串的所有空

动态代理,要扩展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);
        
    }
}

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

热点排行