关于jdon的ioc的入门问题

09-05-26 deyami

示例中有如下一段代码

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>
<p>

请问,

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 下一页