关于jdon的ioc的入门问题

deyami 09-05-26
         


示例中有如下一段代码

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;
}

         

banq
2009-05-26 08:46

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

deyami
2009-05-26 10:44

谢谢banq大哥。

我还有一点小问题。

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

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

banq
2009-05-26 15:57

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

都可以,只是名称不同。

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

Hqiu
2009-05-26 16:59

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

2Go 1 2 下一页