精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-16
最后修改:2009-01-22
注:在JavaEye注册不久,前些天这篇文章发布在了blog首页,似乎大家都在论坛活动多,因此转移到论坛这边分享关键字: 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,配置量是 其中 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原理有以下要点:
使用ServiceFactory 进行业务开发,代码如下: 至于事务管理,即可使用向service注入transactionManager; 也可以使用 Spring 的 3. 通用的动态Bean管理(自定义BeanFactory类) 在上例中,注意新增了一个BeanFactory,区别于Spring 的 BeanFactory 接口。自定义 BeanFactory 通过 createBean(className) 进行动态bean注册和创建,
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-09-16
完全丧失IOC的核心理念,越改越不伦不类
|
|
返回顶楼 | |
发表时间:2008-09-16
引用 4. JDK问题 以上方案主要针对1.4。 但同样适用1.5及以上。有朋友说,1.5中用 annotation + <context:component-scan/>标签也能完成类似的工作,但那样需要在 Java 代码中写很多 annotation , 个人不偏好使用 annotation ,因为它相当于xml配置移到了 Java代码中,并且维护不方便。 麻烦看一下<context:component-scan/>的文档,并不一定需要annotation |
|
返回顶楼 | |
发表时间:2008-09-16
jones 写道 完全丧失IOC的核心理念,越改越不伦不类
老兄似乎没看明白,我是变配置型IOC为动态型IOC, 内部依然使用的Spring 的 registerBeanDefinition()方法提供的功能。这源于Service,DAO这一类相对结构固定,接口格式统一的情形。 实而是将 n 个业务bean xml配置, 按统一逻辑浓缩为一个 ServiceFactory 类, 目的在于减少配置, 这一点不知老兄有没有看明白。 如果只教条,死板的遵循Spring的标准范例,不做任何变通,无异于当年死板的遵守EJB Entity bean规范。 |
|
返回顶楼 | |
发表时间:2008-09-16
badqiu 写道 引用 4. JDK问题 以上方案主要针对1.4。 但同样适用1.5及以上。有朋友说,1.5中用 annotation + <context:component-scan/>标签也能完成类似的工作,但那样需要在 Java 代码中写很多 annotation , 个人不偏好使用 annotation ,因为它相当于xml配置移到了 Java代码中,并且维护不方便。 麻烦看一下<context:component-scan/>的文档,并不一定需要annotation 哦,这样。那我要再看看。多谢提醒。 |
|
返回顶楼 | |
发表时间:2008-09-17
这种实现看起来挺别扭 到处都要显式调用Factory 另外遇到service循环引用怎么处理
|
|
返回顶楼 | |
发表时间:2008-09-17
我们不是应该将java代码拿到配置中,而不是将配置拿到java代码中吗?
这样还叫做注入吗 |
|
返回顶楼 | |
发表时间:2008-09-17
我觉得可以分写多个spring配置文件啊
|
|
返回顶楼 | |
发表时间:2008-09-19
Object bean = BeanFactory.createBean(UserService.class);
还是在配置文件中统一写好点,从配置文件直接就了解大概结构了 |
|
返回顶楼 | |
发表时间:2008-09-27
phong 写道 我觉得可以分写多个spring配置文件啊
也可以啊,结构要清晰一些。 不过不管几个文件,一大堆 service dao配置,和 零配置,你觉得哪个更好? |
|
返回顶楼 | |