总算开始动手做这个javascript remote object invoker
因为是独立的框架并且参考了DWR的一些需求,发现DWR无法接受有参数的构造器,这可怎么得了。。。
所以加上了IOC的一丢丢(= =||这个是《爱情公寓》里面的用法)功能
OK,看下用法,这个东西做完之后会发上来
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE remote-beas PUBLIC
"-//JAVAZONE//DTD Javazone Remote Object Invoker//EN"
"http://www.javazone.org/jroi10.dtd">
<remote-beans>

    <bean class="org.javazone.jroi.example.Test" javascript="Test" scope="single">

        <constructor>
            <args index="0" type="java.lang.Integer" value="23" />
        </constructor>

        <method name="test"/>

    </bean>

</remote-beans>
很简单的配置,和Spring很像,呵呵
public class IocTest
{

    public static void main(String[] args)
    {
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        String file = "org/javazone/jroi/example/jroi.config.xml";
        BeanMetasConstructor constructor = new XMLBeanMetasConstructor(loader
                .getResourceAsStream(file));
        BeanMetas metas = constructor.construct();
        IoContainer container = new BeanMetasContainer(metas);

        container.getBean("Test");
        container.getBean("Test");
        container.getBean("Test");
        container.getBean("Test");
        container.getBean("Test");

    }
}
这个是一个测试的代码
public class Test
{
    public Test(String str)
    {
        System.out.println(str.toString() + " : " + str.getClass().toString());
    }

    public Test(Integer str)
    {
        System.out.println(str.toString() + " : " + str.getClass().toString());
    }

    public Test(OtherBean b)
    {
        System.out.println(hashCode());
        System.out.println(b.hashCode());
        System.out.println();
    }

}
测试用的对象
下面是运行结果
DEBUG [main](XMLBeanMetasConstructor.java:85) - Create Beans
==================================== remote-beans ====================================

***************************************** 1 *****************************************

    javascript:Test
    class:org.javazone.jroi.example.Test
    scope:single

    constructor:
        arguments:
            type:java.lang.Integer
            value:23

    methods:
        method:test

*************************************************************************************

==================================== remote-beans end ====================================
23 : class java.lang.Integer

注意上面最后一排的打印,这个打印是来自于Test类的构造函数,而因为配置里写了Scope="single"所以只创建的一个实例,尽管调用了多次container.getBean("Test");

当然,这里还有一个特点,因为Javascript必须是唯一的,所以和id同出一处,我在考虑要不要把这个javascript属性修改为id
我在考虑下,当然我保留了id用来处理注入