Spring实践技巧 - 业务bean零配置
(原创文章)1. Spring业务bean配置的困扰
??? 利用Spring IoC 容器进行项目开发的一个重要工作就是在 applicationContext.xml 中进行bean管理。然而,业务bean(BO或Service),DAO bean的配置量随项目的功能规模增长而增长,对于大型项目而言,庞大的 bean配置文件维护起来极为痛苦。例如:
?
?
?
?
上例为两个功能的配置,鉴权(auth)和用户(user)。这种Service bean和DAO bean 的管理方式是按功能的管理方式,即one by one,配置量是
???????? F=f(n)
????? 其中 n 是项目中功能的数量。上例虽充分体现了Spring IoC容器依赖注入的优良特性,但配置量过大,维护和管理难度很大,不是一种最佳实践。
?
2. 零配置的动态Service Bean管理(ServiceFactory)??
?
???? 有没有一种既能发挥Spring优势,又能节省配置的模式呢?我们可以观察到,每个功能的Service bean的配置,只有 dao 注入是不同的,其他如Service类的命名,Service的事务管理器注入,Service类和DAO类的命名关系等都具有相似性或者完全相同;dao bean配置类似。
??? 因此,可以采用动态bean管理(Dynamic Bean Management)思想简化业务bean配置。动态bean管理使用新定义的 ServiceFactory 的createService方法来创建业务类Service实例, ServiceFactory? 在创建时,自动进行dao创建,datasource注入等,不再需要进行bean的配置。原理如下图所示。
?
?
ServiceFactory原理有以下要点:
1) 利用了Spring ApplicationContext 的 registerBeanDefinition方法和动态bean注册技术;
2) 作为bean管理的一个规范:要求Service类实现 setDAO(DAO dao)方法,以便统一注入dao实例;
3) 作为bean管理的一个规范:调用 dao.setDatasource(datasource)方法进行数据源注入;
4) 作为bean管理的一个规范:内部使用className作为 service bean 和dao bean的内部id;
5) 作为bean管理的一个规范:ServiceFactory内获取bean实例时,都采用prototype scope。
ServiceFactory内部实现序列图如下:?
?
使用ServiceFactory 进行业务开发,代码如下:
?
?
7 楼 czan.ok 2008-09-16 路过................ 8 楼 myyate 2008-09-22 引用不灵,绑在Spring上,不易于测试。
我觉得既然用了spring就多多使用她已经帮我们完成的东西,不要自己再去实现,如果做项目一味考虑解偶没有意义,万事都有度。
其实你说的service实现上有annotation对你移植没有任何影响。