论坛首页 Java企业应用论坛

Yan Container beta 1 发布

浏览 36120 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-04-05  
有兴趣无时间啊,可悲...
关注,回家把Src下下来看看
0 请登录后投票
   发表时间:2005-04-05  
robbin 写道
jdonframework不管怎么被骂,好歹还有人关注一把, Yan Container竟然连一点反响都没有,难怪ajoo急于使用激将法呢。

现在上不去sourceforge.net,还没有下载到jar,没有办法评论,只提几个问题:

1、好像没有文档呀?


目前只有javadoc。其它的东西比如为什么用ioc容器之类的
我发现pico的文档基本也够解释了。我的api和pico非常相似。
比如它是registerComponentImplementation, 我是registerConstructor。
它是getComponentInstance, 我是getInstance。
文档我正在考虑写,不过需要花点时间才能写的象pico那么漂亮。

robbin 写道

2、Yan相比于其他IoC Container有什么突出优点?


1。它不对type 0, type 1之类的做要求。你用你自己喜欢的。什么constructor,setter, static method, facotry method, abstract factory, reflection 甚至jndi都随你便。我觉得这才叫没有侵入性。

2。它提供的基于combinator的组件方式灵活优雅。比如,我最近看到的一个pico的maillist里面他们在探讨的一个问题:
要想对一个组件的某些部件做特殊定制,但是又不想让这些部件作为全局组件被别的组件看到。
他们设想用子container,用什么composer,搞得相当麻烦。
而在我的yan里面,不过是:
container.registerComponent(
  Components.ctor(A.class);
  .withArgument(0, Components.ctor(B.class););
  .withArgument(1, Components.ctor(C.class););
);;

这些针对参数的component自然就是局部的,你不主动把它register到container里面,别人是看不见的。

3。实现代码比pico更模块化,当然这点终端用户看不见。
robbin 写道

3、你做Yan是为了fun,还是为了啥目标?


本来没想做,就觉得pico不支持static method挺傻的,想着举手之劳给contribute一下,没想到看着看着pico的代码越看越不爽,于是想自己做一个。
0 请登录后投票
   发表时间:2005-04-05  
nihongye 写道
引用
final Component x = Components.useKey("x")
.map(new Map(){
    public Object map(Object x){
      return ((X)x).add(1);
    }
  });

可以控制Map map(Object x)所包装的实例为((X)x).add(1)调用的第一次结果的实例吗?

你是说,这个component在随后的调用中都返回同一个实例?
可以呀。就是一个singleton了。

final Component x2 = x.singleton();;

这个x2就满足你的要求。
0 请登录后投票
   发表时间:2005-04-05  
引用
Components.useKey("x")
.map(new Map(){
public Object map(Object x){
return ((X)x).add(1);
}
});

我是想着每次这样都返回同一个实例。
粗略看了下文档,看来很不了解这东西,有时间再好好看看,最好你写个使用手册。卡卡。。。。
0 请登录后投票
   发表时间:2005-04-06  
nihongye 写道
引用
Components.useKey("x")
.map(new Map(){
public Object map(Object x){
return ((X)x).add(1);
}
});

我是想着每次这样都返回同一个实例。
粗略看了下文档,看来很不了解这东西,有时间再好好看看,最好你写个使用手册。卡卡。。。。

什么是“每次这样”?
那个singleton符合你的要求吗?

就是
Components.useKey("x");
.map(new Map();{
  public Object map(Object x);{
    return ((X);x);.add(1);;
  }
});.singleton();;

它保证这个component永远只返回同一个实例。
0 请登录后投票
   发表时间:2005-04-06  
符合.
singleton的使用,应该是将其注册为一个singleton组件:
container.registerComponent("abc",xxComponent.singleton())
假若需要从singleton换成prototype,就只需要在一个位置修改。

map,list,array Compent的使用麻烦了,参照spring做些便利的封装。
比如
Compents.hashMap(String text,Type plainText)
text传入  a=b|c=e
解析到ValueConpment并生成HashMapCompent.

另外HashMapCompent key不能是Compent?
0 请登录后投票
   发表时间:2005-04-06  
引用
Compents.hashMap(String text,Type plainText)
text传入 a=b|c=e
解析到ValueConpment并生成HashMapCompent.

这种封装可以做。但是可以在外围库或者第三方库做了。
毕竟没有一个标准的用字符串描述map的语法。

其实,直接调用java api本来就麻烦。这个java api和pico一样,是设计给库用的。所以结构统一灵活最重要。比如我的hashmap可以储存其它的component,具体的值只是一个特殊情况。


如果用jaskell做配置,就是这样了:

hashmap {a=value"b"; c=value "e"}

也很简单啊。


引用
另外HashMapCompent key不能是Compent?


什么意思?key可以是任何东西,自然包括其它Component。
0 请登录后投票
   发表时间:2005-04-06  
ajoo 写道
gigix,倒是有点问题请教呢。
关于open source。
1。是不是BSD的license就够好了?
2。是不是我必须在所有代码里包含那么大长段的copyright声明?
我原来没包括,现在一个一个类copy-paste想起来有点烦。
3。我的代码的注释是不是不能有公司名字?
4。你老兄批评jf那么犀利,也给俺来几斧子?放心,偶脸皮厚,要是不喜欢的,就装作没听见。


应该每个source file都有版权声明的,而且应该在根目录有licence文件。 你找个bsd的项目看一下别人的目录结构就知道了嘛。

有没有公司名字无所谓,但是你的版权声明必须清楚,让别人敢用。
0 请登录后投票
   发表时间:2005-04-06  
引用
什么意思?key可以是任何东西,自然包括其它Component。

不好意思,没说明白。
我的意思是:
创建HashMapCompent里面的map时,它的key是通过keyCompent.create()所产生的,就像value一样。

顺便宣传一下:代码写得很干净,doc写得很详细,接口考虑得很充分(怎么能想得这么细致得?)。对象的创建方式的扩展性也超强,只要自己再写Compent就行了,显然,spring在对象的创建方式的扩展性这块跟yan不能相提并论啊,很不错的东西。比较有意思的有装饰Compent,这是spring所没有得。
0 请登录后投票
   发表时间:2005-04-06  
在SetterInjectionComponentAdapterTestCase.testAllUnsatisfiableDependenciesAreSignalled
里面,  为什么一定要在Container里面注册一个List给A?

如果只想让Container通过setter为A注入已经存在的components, 应该怎么写代码?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics