论坛首页 Java企业应用论坛

讨论:在spring中自动引用dao的bean的设想

浏览 8179 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-12   最后修改:2011-01-30
Updated on 2011-1-30
在struts2里使用了自动查找类的技术。
那部分代码可以用来实现这个。当然,主要还是要看具体项目需求。 
Spring mvc的annotation方式配置Controller也采用了类似技术。

其基本思路是 从 Resource中查找META-INF下包含的jar包和其它classpath信息。
对于直接文件系统路径下文件,直接遍历目录得到类名;
对于jar,则内存中解压,遍历指定路径,得到类名;
在得到类名后,用该类名在classloader中查找具体实现类。
——————————————————————————————————————————————————
最近,大略看了下rails,觉得那种约定方式的编程,确实方便很多。

想到spring的DAO模式,其实基本上都是类似模式。
一堆接口对应一堆dao的实现,配置基本上都是雷同的。
不知道有无可能使用使用这样的方式来自动引入dao:

DaoFactory检索dao interface所在的package,然后解析dao的名字出来,
根据dao的名字建立bean放到spring的bean factory里,同时设置一下session factory。
比如有一个UserDao在接口包里,那么daoName就是userDao,生成的Bean就是userDao。
使用的实现类则按名称模式拼出来%daoName%Hibernate,UserDaoHibernate,或者就是以包的
最后一个字符串作为后缀。
这样就可以放一个dao的interface和实现,进行自动配置了。

类似下面的配置代码。

<bean id="daoFactory" class="cn.mudfans.dwangel.spring.DaoFactory">
<property name="sessionFactory" value="sessionFactory"/>
<property name="daoInterfacePackage" value="cn.mudfans.dwangel.dao"/>
<property name="excludes">
    <props/>
</property>
<property name="daoImplementPackage" value="cn.mudfans.dwangel.dao.hibernate"/>
<property name="daoImplementPattern" value="%daoName%Hibernate"/>
</bean>

剩下的问题是,我对spring还不了解,不知道如何解决依赖关系的检查问题。


大家给点意见吧。
   发表时间:2007-01-12  
很不错的想法.关键是约定.service也可以直接引入包
0 请登录后投票
   发表时间:2007-01-12  
ronghao 写道
很不错的想法.关键是约定.service也可以直接引入包
对啊对啊,这样就不用每次都要为了加一个dao或者service还要改配置了。
0 请登录后投票
   发表时间:2007-01-12  
关键是这一步不好做,
DaoFactory检索dao interface所在的package里面接口的名字
0 请登录后投票
   发表时间:2007-01-12  
magice 写道
关键是这一步不好做,
DaoFactory检索dao interface所在的package里面接口的名字
嗯,原来以为reflect可以做到,后来查了一下,结果不行。

文件路径是可以遍历的。要不这部分类就不打包了,直接放到目录里?然后将目录作为classpath加入。
0 请登录后投票
   发表时间:2007-01-12  
不是好的解决方案....
不过对于特定的项目还是可以的.
0 请登录后投票
   发表时间:2007-01-12  
希望给出代码,好象不是很懂你的意思。
0 请登录后投票
   发表时间:2007-01-19  
  

花了几天时间终于把东西做出来了。

项目发布给大家看看。

因为包含了依赖的jar包,比较大,就不在这里放附件了。
放到我自己的网站上。
http://dwangel.mudfans.cn/projects/dyndao.rar
用eclipse做的项目。
0 请登录后投票
   发表时间:2007-06-27  
日本人做的seasar2就含有这方法,
http://s2container.seasar.org/ja/DIContainer.html
只要按照约定,命名class&packge,就能省去写xml的时间。
0 请登录后投票
   发表时间:2007-06-27  
我知道的,但是Seasar2跟spring是等价的东西。
一般不会用spring又用seasar。
0 请登录后投票
论坛首页 Java企业应用版

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