精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-04-08
没那么麻烦,下面是我对你的要求的直接机械翻译,
java.util.List list7 = new java.util.ArrayList();; list7.add(...); ...//this populate the list7 with values from 1 to 7. Component beana = Components.bean(Class.forName("com.javaeye.BeanA");); .withProperty("beanC", Components.useKey("beanC");); .withProperty("list", Components.value(list7);); .withProperty("name", Components.value("ajoo hao!");); .withProperty("beanB", Components.useKey("beanB");; 线程安全我是考虑了的。用了些synchronized。不过多线程不那么容易测试,所以也不知道是否有bug。 |
|
返回顶楼 | |
发表时间:2005-04-08
ajoo 写道 没那么麻烦,下面是我对你的要求的直接机械翻译,
java.util.List list7 = new java.util.ArrayList();; list7.add(...); ...//this populate the list7 with values from 1 to 7. Component beana = Components.bean("com.javaeye.BeanA"); .withProperty("beanC", Components.useKey("beanC");); .withProperty("list", Components.value(list7);); .withProperty("name", "ajoo hao!"); .withProperty("beanB", Components.useKey("beanB");; 线程安全我是考虑了的。用了些synchronized。不过多线程不那么容易测试,所以也不知道是否有bug。 真的? 嘿嘿,真实不好意思,怪我没看懂你的设计。 这样一来的话,倒是很不错哦。 |
|
返回顶楼 | |
发表时间:2005-04-08
引用 我胡思乱想了一下,组装组件似乎可以分为这么两种:
1)全局组装+局部组装结合 2)智能式自动组装 3)支持运行时线程安全组装 我个人认为以上4种方式 佩服啊佩服! |
|
返回顶楼 | |
发表时间:2005-04-08
ajoo 写道 引用 我胡思乱想了一下,组装组件似乎可以分为这么两种:
1)全局组装+局部组装结合 2)智能式自动组装 3)支持运行时线程安全组装 我个人认为以上4种方式 佩服啊佩服! 头脑混乱,夜深了,睡觉了! |
|
返回顶楼 | |
发表时间:2005-04-08
1.
引用 读取到beanB和BeanC时类似,值得注意的是,当最后读取配置文件完毕,应用中需要获取BeanA的实例时,Yan容器必须能够对BeanA,BeanB,BeanC之间的依赖性进行解析和有顺序的组装。
这个yan做得到吧。 2.局部组装和全局组装由yan实现,也应该事件容易的事情,但目前YanContainer的接口Dependency getDependency()还没看到作用范围这种概念,感觉有用性也是0。 3.线程这个太难了吧,是否new Abc(),容器就自动组装好了? |
|
返回顶楼 | |
发表时间:2005-04-08
nihongye 写道 1.
引用 读取到beanB和BeanC时类似,值得注意的是,当最后读取配置文件完毕,应用中需要获取BeanA的实例时,Yan容器必须能够对BeanA,BeanB,BeanC之间的依赖性进行解析和有顺序的组装。
这个yan做得到吧。 2.局部组装和全局组装由yan实现,也应该事件容易的事情,但目前YanContainer的接口Dependency getDependency()还没看到作用范围这种概念,感觉有用性也是0。 3.线程这个太难了吧,是否new Abc(),容器就自动组装好了? 是啊, 1)注册状态对象零件, 2)然后获取有状态组件。 上面的操作有可能是并发进行 |
|
返回顶楼 | |
发表时间:2005-04-08
现在持久层就相当于干了这样件事?
DAO.getAbc(Id); 这样就取得了Abc类型的指定的一个组件。 还是你说的组件是指什么? |
|
返回顶楼 | |
发表时间:2005-04-08
躺在床上 又胡思乱想了一下,AJOO猪,你过来一下,我提出这么一个要求:
这么一个配置文件: <AJOOContainer> <global> <bean id="aaa" /> <gloabal> <local> <bean id="ccc" class="BeanC"> <property name="a"><ref bean="aaa/></property> <property name="b"><ref bean="bbb"/></property> </bean> <bean id="bbb" /> </local> <local> <bean id="ccc" class="BeanC"> <property name="a"><ref bean="aaa/></property> <property name="b"><ref bean="bbb"/></property> </bean> <bean id="bbb" /> </local> </AJOOContainer> 其中全局表示local中的组件可以引用它来进行组装,local作为一个子容器的概念,字容器之间互不关涉,但是也可以手工定义几个字容器之间可以互相引用。 引入这么一个功能后,系统配置文件就可以分开多个子系统,子系统之间的定义互不干涉,合并的时候也不会很困难。 |
|
返回顶楼 | |
发表时间:2005-04-08
nihongye 写道 现在持久层就相当于干了这样件事?
DAO.getAbc(Id); 这样就取得了Abc类型的指定的一个组件。 还是你说的组件是指什么? 由状态对象零件并不简简单单类似于Web中通过request.parameters传递上来的一个字符串。 有可能是一个 同步连接Connect,也可能是一个会话Session等等。 考虑这么一个有状态组件: abstract AJOO_ZHUZHU{ //statefull component Connect connect; //statefull DAO dao; MailSender ms; WebServiceRMI wmr; public void execute();{ dao.report(connect.readMsg(););; ms.sendMail(connect.readMsg(););; //... more logic response=this.DoTransaction();; connect.writeReponseMsg(res);; } public abstract Msg doTransaction();; } 虽然可以通过将Connect 作为Execute的参数消除这个有状态,但是这里只是为了说明问题而已。 利用AJOO 的 YAN IOC 容器,那么我的系统骨干框架就可以这么干了: Connect connect= ....... //wait for a connect, block here //一个同步连接上来,开启一个线程进行处理 new Thread(); { yanContainer.regisgerValue("connect",connect);; (( AJOO_ZHUU);yanContainer.getInstance("ajoo zhuzhu "););.execute();; //prototype } 这样的话,对于我的系统框架来说,关于对象组装全部的工作都交给Yan 容器来做了。 我的那个很恶心的有状态组件AJOO_ZHUZHU也可以写的很简单,丝毫不容关心它的那些组件从哪儿得来。 |
|
返回顶楼 | |
发表时间:2005-04-08
nihongye 写道 1.
引用 读取到beanB和BeanC时类似,值得注意的是,当最后读取配置文件完毕,应用中需要获取BeanA的实例时,Yan容器必须能够对BeanA,BeanB,BeanC之间的依赖性进行解析和有顺序的组装。
这个yan做得到吧。 2.局部组装和全局组装由yan实现,也应该事件容易的事情,但目前YanContainer的接口Dependency getDependency()还没看到作用范围这种概念,感觉有用性也是0。 3.线程这个太难了吧,是否new Abc(),容器就自动组装好了? getDependency被用在DelegatingContainer里面,否则,你怎么自己实现Component? create(Dependency dep);; 拿到一个Component,和一个ComponentMap,没有getDependency,你怎么调用这个create函数呢? 不过这主要是给外围库作者用的。终端用户不需要关心。 |
|
返回顶楼 | |