关于jdon的ioc的入门问题


示例中有如下一段代码


public class TestServicePOJOImp implements TestService, Poolable{
private JdbcDAO jdbcDao;
public TestServicePOJOImp(JdbcDAO jdbcDao) {
this.jdbcDao = jdbcDao;
}
public void createUser(EventModel em) {
....
}
}

配置文件中是这样写的


<app>
<services>
<pojoService name="testService" class="com.jdon.framework.test.service.TestServicePOJOImp"/>

<!-- 新增加的配置:jdbcDAO是被TestServiceImp调用的,是为其服务的。 -->
<component name=
"jdbcDAO" class="com.jdon.framework.test.dao.JdbcDAO"/>
</services>
</app>

请问,
TestService testService = (TestService) WebAppUtil.getService("testService ", request);
当我获取bean的时候,component jdbcDAO是怎样被注入到testService中的?是将jdbcDAO作为testService的构造参数吗?还是直接为private JdbcDAO jdbcDao字段赋值?

还有个小问题,


<services>
<pojoService name="forumService" class="com.jdon.jivejdon.service.imp.ForumServiceImp"/>
<pojoService name=
"accountService" class="com.jdon.jivejdon.service.imp.account.AccountServiceImp"/>
<pojoService name=
"accountProfileService" class="com.jdon.jivejdon.service.imp.account.AccountProfileServiceImp"/>

<pojoService name=
"forumMessageService" class="com.jdon.jivejdon.service.imp.message.ForumMessageShell"/>
<pojoService name=
"forumMessageQueryService" class="com.jdon.jivejdon.service.imp.message.ForumMessageQueryServiceImp"/>
<pojoService name=
"uploadService" class="com.jdon.jivejdon.service.imp.upload.UploadServiceShell"/>

<pojoService name=
"shortMessageService" class="com.jdon.jivejdon.service.imp.shortmessage.ShortMessageServiceImp"/>
<pojoService name=
"shortMessageQueryService" class="com.jdon.jivejdon.service.imp.shortmessage.ShortMessageQueryServiceImp"/>



<component name=
"messageKernel" class="com.jdon.jivejdon.service.imp.message.MessageKernel"/>
<component name=
"messageRenderingFilter" class="com.jdon.jivejdon.service.imp.message.MessageRenderingFilter"/>
<component name=
"containerUtil" class="com.jdon.jivejdon.service.util.ContainerUtil"/>
<component name=
"sessionContextUtil" class="com.jdon.jivejdon.service.util.SessionContextUtil"/>
</services>

如果确实是通过构造参数注入的话,jdon的配置文件中好像并未强制要求 component节点作为pojoService 节点的属性,
那么对于下面的这种构造参数过多的类,造成配置文件过于杂乱,不便于开发?


public ForumRepository(ForumDao forumDao,MessageRepository messageRepository,ForumBuilder forumBuilder){
this.forumDao = forumDao;
this.messageRepository = messageRepository;
this.forumBuilder = forumBuilder;
}

jdon是构造参数注射,是将jdbcDAO作为testService的构造参数,目前只提供这一种,简单方便。

谢谢banq大哥。

我还有一点小问题。

元素间依赖注入的关系是什么?component可以被注入到service中,component与component之间也可以注入吗?为什么还要有constructor属性?

能不能提示我一下配置文件的说明文档放在哪里了,我在仔细研究一下,嘿嘿~
[该贴被deyami于2009-05-26 10:48修改过]

>omponent可以被注入到service中,component与component之间也可以注入

都可以,只是名称不同。

constructor属性类型指出了即将被注射进来的类型,注射是按照类型auto wired,框架自己去找类型注射,无需程序员关注。

最近看了一下google的IOC容器guice2.0,感觉很强大,而且也非常轻巧,值得去试一下

guice确实强大,不过我有种感觉,这种ioc不是委托式的,感觉用得不好反而会引起麻烦~~

我的小想法,欢迎拍砖