简化Spring(1) 配置文件

人人都爱Spring加Hibernate。

但Spring MVC+hibernate的Sample如Appfuse的代码却算不得最简洁优美好读,如果在自己的项目中继续发挥我们最擅长的依样画葫芦大法,美好愿望未必会实现。

所以,Pramatic精神不灭。这个系列就是探寻最适合自己的Spring+Hibernate模式。

I-配置文件简化

我厌倦一切配置文件繁重的框架。

最好的情况是,框架提供极端灵活复杂的配置方式,但只在你需要的时候。

Spring提供了三种可能来简化XML。随着国内用户水平的提高,这些基本的简化技巧大家都已掌握。

大家可以直接看第3,第4点--Spring 1.2, Spring 2.0的后继改进。

1.1.autowire="byName" /"byType"

假设Controller有一个属性名为customerDAO,Spring就会在配置文件里查找有没有名字为CustomerDAO的bean, 自动为Controller注入。

如果bean有两个属性,一个想默认注入,一个想自定义,只要设定了autowire,然后显式的声明那个想自定义的,就可以达到要求。这就应了需求,在需要特别配置的时候就提供配置,否则给我一个默认注入。

还有一个更懒的地方,在最最根部的<beans>节点写一句default-autovwrie="byName",可以让文件里的所有bean 都默认autowrie。

不过Rod认为开发期可以这样,但Production Server上不应该使用Autowire。而我觉得那些自定义一次的地方比如TranscationManager应该详细定义,而Dao,Controller这种大量重复定义的bean就可以偷点懒了。

1.2.<bean>节点之间抽象公共定义和 Inner Bean

这太方便懒人了,想不到两个独立的XML节点都可以玩继承和派生,子节点拥有父节点的全部属性。

最好用的地方就是那个Transtion Proxy的定义。先定义一个又长又冗的父类,然后用子类去继承它。

另外,还有一个Inner Bean的机制,可以把DAO写成Proxy的内部类。为什么要写成内部类?为了让Proxy冒名顶替它去让Controller Autowire。(详见后面的示例)

1.3. 宽松的配置, To XML or Not to XML

据说Spring比Struts的配置宽松了很多,这就给人把东西从配置文件中撤回原码中的机会。

不赞成什么都往配置文件里晒,造成了Rich Information的配置文件,修改或者查看的时候,要同时打开配置文件和原码才能清楚一切。

而我希望配置文件就集中做一些整体的配置,还有框架必须的、无需管理的冗余代码。而一些细节的变化不大的配置和逻辑,就尽量别往里塞了。因此,Success/Fail View 的配置,不建议放在里面。

时间: 2024-12-21 18:29:04

简化Spring(1) 配置文件的相关文章

关于spring的配置文件总结

spring比较庞大,很多功能实现依赖配置文件,比较繁琐的配置文件确实比较头疼,这里通过查阅,上网等方法总结了关于spring配置文件的内容,如果有不全或者失误之处希望大家多多指正. <beans     这里是配置文件的根节点,所有配置在beans中,内可以包含多个bean          xmlns=http://www.springframework.org/schema/beans xmlns:是XML NameSpace的缩写,因为XML文件的标签名称都是自定义的,自己写的和其他人定

简化spring(5)--减少不必要的基于接口编程

编程     众所周知,Spring是提倡基于接口编程的.    但也有些Service类,比如SaleOrderManager 和SaleOrderManagerImpl,只有5%的机会再有另一个Impl实现.95%时间里这两兄弟站一起,就像C++里的.h和.cpp,徒增维护的繁琐,所以刚开始用Spring的时候就想去掉它,今天偶然在群里聊起动态代理,算是搞明白了其中的道理,谢谢Sparkle :)      IOC是不会强制基于接口的,是这些Service类一般要使用Spring的声明式事务

spring aop 配置文件提示报错,但程序能正常运行

问题描述 spring aop 配置文件提示报错,但程序能正常运行 spring aop 配置的时候报错导入的jar包如下: 程序运行没有问题,但是这个报错总是存在,找了很多资料,始终没有解决,求大神赐教! 解决方案 未导入spring对应的DTD标签库

eclipse配置src下的spring的配置文件会报找不到的错误.?用myeclipse能找到.

问题描述 eclipse配置src下的spring的配置文件会报找不到的错误.?用myeclipse能找到. spring的配置文件放在src目录下死活找不到.contextConfigLocationWEB-INF/classe/applicationContext.xml和contextConfigLocationclasspath:applicationContext.xml都试过了,还是不行,是eclipse的BUG吗? WEB-INF/classes/applicationContex

spring 配置文件-spring 一个配置文件如何被多个项目引用

问题描述 spring 一个配置文件如何被多个项目引用 项目是依赖maven管理的,现在需求是这样的 app-parent下的app-core.app-web1.app-web2为module,其中app-core是公用的代码实现,app-web1和app-web2是两个web网站项目,spring配置,其中applicationContext.xml需要引用SpringHibernate.xml文件, 但我想把SpringHibernate.xml放在app-core里公用,想被多个web项目

在spring的配置文件中配置c3p0和在hibernate的配置文件中配置c3p0有什么区别?

问题描述 在spring的配置文件中配置c3p0和在hibernate的配置文件中配置c3p0有什么区别? 在spring的配置文件中配置c3p0和在hibernate的配置文件中配置c3p0有什么区别? 我最近在学习如何配置struts2+spring+hibernate,其中数据库连接池使用c3p0,一开始在hibernate.cfg.xml中添加c3p0连接的信息如下: <property name="hibernate.connection.provider_class"

spring MVC配置文件示例

spring MVC配置文件示例 Xml代码   <?xml version="1.0" encoding="UTF-8"?>   <beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="h

ssh中spring的配置文件如何配置属性可以在控制台输出hibernate的sql语句?

问题描述 ssh中spring的配置文件如何配置属性可以在控制台输出hibernate的sql语句? 谢谢<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property>&l

Spring之配置文件bean作用域的详细介绍

Spring的配置文件applicationContext.xml中bean作用域的详细介绍: 1:对象的创建:单例和多例        scope="singleton",默认值,单例 适合于[service,dao,工具类]        scope="prototype",多例适合于[Action对象]2:什么时候创建对象?      scope="singleton" 在启动的时候就已经创建了bean,且整个应用只有一个,在容器初始化之前