该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2005-01-12
tel9693 写道 再细想,确实想清楚了这种自动装配方式的缺陷: 使用这种方式的主要问题是,它会为action的每一个属性去找有没有定义在spring的bean配置文件中的名字相同的bean,如果找到了就会自动地为这个action组装。 这样带来的问题就是,如果你的action的某个属性是不想被自动装配的,而另外一个action的同名同类型的属性是需要自动装配的,你就不好处理了。 你说的是ByName,webwork的那个拦截器还提供了ByType 如果你担心根据名字来装配不放心(没有编译期检查),那么用类型装配来就好多了。 至于你担心的问题,去实践一下就知道有没有可能遇到了。 |
|
返回顶楼 | |
发表时间:2005-01-12
这种方式因为是是动态把Bean进行实例化的,在使用OGNL时是不是会有影响?
|
|
返回顶楼 | |
发表时间:2005-01-15
Readonly 写道 你说的是ByName,webwork的那个拦截器还提供了ByType 如果你担心根据名字来装配不放心(没有编译期检查),那么用类型装配来就好多了。 至于你担心的问题,去实践一下就知道有没有可能遇到了。 谢谢你上次的指导,让我彻底明白了第三种方法的含义。 我在配通了第三种方法后,回头想了想,最终还是采用了第一种方法。 项目大了,多人开发的情况下,难以互相协调,万一Action里定义了 一个属性,没想装配,可别人恰好定义了一个同名的Spring Bean呢? 这不是没有可能么!至于ByType,就更不对头了,如果Spring里定义 了两个同类型的bean呢? 用了用,觉得第一种方法也不太麻烦么 |
|
返回顶楼 | |
发表时间:2005-01-16
robbin 写道 如果为了效率,不如你不要用IoC了,那都是reflection,效率低得很呐。
既然你都要自动装配了,你干吗非要给不需要自动装配的属性声明相同的名称呢? 开发和部署不一定都是同一个人完成的,而且如果写程序的时候就要先想好Spring装配的问题,避免冲突,似乎和Spring无侵入性的本意有点背道而驰了。 |
|
返回顶楼 | |
发表时间:2005-01-28
withwind 写道 Readonly 写道 你说的是ByName,webwork的那个拦截器还提供了ByType 如果你担心根据名字来装配不放心(没有编译期检查),那么用类型装配来就好多了。 至于你担心的问题,去实践一下就知道有没有可能遇到了。 谢谢你上次的指导,让我彻底明白了第三种方法的含义。 我在配通了第三种方法后,回头想了想,最终还是采用了第一种方法。 项目大了,多人开发的情况下,难以互相协调,万一Action里定义了 一个属性,没想装配,可别人恰好定义了一个同名的Spring Bean呢? 这不是没有可能么!至于ByType,就更不对头了,如果Spring里定义 了两个同类型的bean呢? 用了用,觉得第一种方法也不太麻烦么 可以变通一下吗,可以在这个interceptor里包含一个逻辑,将你所有的action里不想装配的prop在autowire之后再setYourProperty(null),为了做成通用可以用reflection来实现, 用一个xml或者property文件提供声明性定义那些不需要自动装配的prop,比如 <nonIoc> <class name="com.javaeye.web.webwork.action.SimpleAction1" > <nonIoc-props> <property name="service1" /> <property name="service2" /> </nonIoc-props> </class> <class name="com.javaeye.web.webwork.action.SimpleAction2" > <nonIoc-props> <property name="service1" /> <property name="service2" /> </nonIoc-props> </class> </nonIoc> |
|
返回顶楼 | |
发表时间:2005-01-28
楼上的做法不是把问题变得更复杂了吗,这样的话,难道会比第一种更简单?
|
|
返回顶楼 | |
发表时间:2005-01-28
zzeric 写道 楼上的做法不是把问题变得更复杂了吗,这样的话,难道会比第一种更简单?
如果是1),试着想一下至少几十个action要配置,1个action可能需要几个service外引用,我可不敢想象这样的情况。 |
|
返回顶楼 | |
发表时间:2005-01-28
firebody 写道 可以变通一下吗,可以在这个interceptor里包含一个逻辑,将你所有的action里不想装配的prop在autowire之后再setYourProperty(null),为了做成通用可以用reflection来实现, 用一个xml或者property文件提供声明性定义那些不需要自动装配的prop,比如
<nonIoc> <class name="com.javaeye.web.webwork.action.SimpleAction1" > <nonIoc-props> <property name="service1" /> <property name="service2" /> </nonIoc-props> </class> <class name="com.javaeye.web.webwork.action.SimpleAction2" > <nonIoc-props> <property name="service1" /> <property name="service2" /> </nonIoc-props> </class> </nonIoc> 如果知道不想装配的是什么,那么直接就用不同的名字好了。 防止的就是不小心或者多人协作中用了相同的名字的情况。 即便有几十个Action,也是一个一个写出来的,那么在写每一个Action的配置时,添加几行需要注入的service也不是什么麻烦事。这样每个Action用到什么Bean清清楚楚,维护的时候也好维护,调试的时候也好检查。 我觉得太多的自动化有时候往往是隐含错误的根源。 |
|
返回顶楼 | |
发表时间:2006-04-04
在实际中我使用的是前一种方法,个人感觉还比较好
楼主能不能给一个典型的配置文件,用webwork2.2.2和spring结合的例子,在2.2.2下,我始终不能实现功能 我原来用的是2.1.7 |
|
返回顶楼 | |
发表时间:2006-04-04
看webwork自带的例子不就有吗...
|
|
返回顶楼 | |