首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-10-26 
讨论:在spring中自动引用dao的bean的设想Updated on 2011-1-30在struts2里使用了自动查找类的技术。那部分

讨论:在spring中自动引用dao的bean的设想
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" 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还不了解,不知道如何解决依赖关系的检查问题。


大家给点意见吧。 很不错的想法.关键是约定.service也可以直接引入包 很不错的想法.关键是约定.service也可以直接引入包对啊对啊,这样就不用每次都要为了加一个dao或者service还要改配置了。  

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

项目发布给大家看看。

因为包含了依赖的jar包,比较大,就不在这里放附件了。
放到我自己的网站上。
http://dwangel.mudfans.cn/projects/dyndao.rar
用eclipse做的项目。 9 楼 volfo 2007-06-27   日本人做的seasar2就含有这方法,
http://s2container.seasar.org/ja/DIContainer.html
只要按照约定,命名class&packge,就能省去写xml的时间。
10 楼 dwangel 2007-06-27   我知道的,但是Seasar2跟spring是等价的东西。
一般不会用spring又用seasar。 11 楼 baallee 2007-07-03   既然已经约定了类名和接口,我们可以动态生成这些配置文件在classpath下,程序运行期间可以让spring动态加载。不过考虑到效率问题,在程序启动时做类似的事会比较好。

热点排行