简化Spring(1)--配置文件(转载)
2009-08-11 21:11
375 查看
人人都爱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 的配置,不建议放在里面。
2.简化后的配置文件
1.Controller只剩下一句
<
bean
name
="customerController"
class
="org.springside.bookstore.web.CustomerController"
autowire
="byName"
/>
2.DAO也只剩一句
<
bean
id
="customerDAO"
class
="org.springside.bookstore.dao.CustomerDao"
/>
3.Service类只剩下5行
<
bean
id
="customerManager"
parent
="baseTxService"
>
<
property
name
="target"
>
<
bean
class
="org.springside.bookstore.service.CustomerManager"
/>
</
property
>
</
bean
>
3.Spring 1.2后xml语法简化
最主要的简化是把属性值和引用bean从子节点
变回了属性值
,对不喜欢autowire的兄弟比较有用。
当然,如果value要CDATA的时候还是要用子节点。另外,list的值可以用空格隔开也比较实用。
1.属性值
<
property
name
="foo"
>
<
value
>
fooValue
</
value
>
</
property
>
简化为
<
property
name
="foo"
value
="fooValue"
/>
2.引用 bean
<
property
name
="foo"
>
<
ref
bean
="fooBean"
>
</
property
>
简化为
<
property
name
="foo"
ref
="fooBean"
/>
3. list可以简化为空格分开的字符串
<
property
name
="myFriendList"
>
<
list
>
<
value
>gigix
</
value
>
<
value>wuyu
</
value
>
</
list
>
</
property
>
简化为
<
property
name
="myFriendList"
value
="gigix wuyu"
/>
4.Spring 2.0来了
如果没什么外力刺激,spring xml 可能就这样不会变了。但现在xml成了过街老鼠,被ror的默认配置和JDK5的annotation逼得不行,当然就要继续求变。
比如有好事者认为,节点名必须以bean打头,附加一个属性id来表示bean名;属性值必须搞一个property子节点,子节点上有个属性name来表示属性名,是给机器看的很不直观的东西。
<
bean
id
="customerDAO" class="org.springside...CustomerDAO"
>
<
property
name
="maxCount"
value
="10"
>
</
bean
>
给人看的东西应该就写成
<
customerDAO
class
="org.springside....CustomerDAO"
maxCount
="10"
/>
Spring 2.0正用schema实现类似的语法,具体请看它的JPetStore sample。
5.使用Spring自带的DTD使编辑器Smart.
如果没有用Eclipse的Spring插件,那至少也要使用spring自带的dtd使XML编辑器smart一些,能够自动为你生成属性,判断节点/属性名称有没有拼错等。
6.还有更变态的简化配置方法
比如autoproxy,不过我觉得更简化就不可控了,所以没有采用。
但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 的配置,不建议放在里面。
2.简化后的配置文件
1.Controller只剩下一句
<
bean
name
="customerController"
class
="org.springside.bookstore.web.CustomerController"
autowire
="byName"
/>
2.DAO也只剩一句
<
bean
id
="customerDAO"
class
="org.springside.bookstore.dao.CustomerDao"
/>
3.Service类只剩下5行
<
bean
id
="customerManager"
parent
="baseTxService"
>
<
property
name
="target"
>
<
bean
class
="org.springside.bookstore.service.CustomerManager"
/>
</
property
>
</
bean
>
3.Spring 1.2后xml语法简化
最主要的简化是把属性值和引用bean从子节点
变回了属性值
,对不喜欢autowire的兄弟比较有用。
当然,如果value要CDATA的时候还是要用子节点。另外,list的值可以用空格隔开也比较实用。
1.属性值
<
property
name
="foo"
>
<
value
>
fooValue
</
value
>
</
property
>
简化为
<
property
name
="foo"
value
="fooValue"
/>
2.引用 bean
<
property
name
="foo"
>
<
ref
bean
="fooBean"
>
</
property
>
简化为
<
property
name
="foo"
ref
="fooBean"
/>
3. list可以简化为空格分开的字符串
<
property
name
="myFriendList"
>
<
list
>
<
value
>gigix
</
value
>
<
value>wuyu
</
value
>
</
list
>
</
property
>
简化为
<
property
name
="myFriendList"
value
="gigix wuyu"
/>
4.Spring 2.0来了
如果没什么外力刺激,spring xml 可能就这样不会变了。但现在xml成了过街老鼠,被ror的默认配置和JDK5的annotation逼得不行,当然就要继续求变。
比如有好事者认为,节点名必须以bean打头,附加一个属性id来表示bean名;属性值必须搞一个property子节点,子节点上有个属性name来表示属性名,是给机器看的很不直观的东西。
<
bean
id
="customerDAO" class="org.springside...CustomerDAO"
>
<
property
name
="maxCount"
value
="10"
>
</
bean
>
给人看的东西应该就写成
<
customerDAO
class
="org.springside....CustomerDAO"
maxCount
="10"
/>
Spring 2.0正用schema实现类似的语法,具体请看它的JPetStore sample。
5.使用Spring自带的DTD使编辑器Smart.
如果没有用Eclipse的Spring插件,那至少也要使用spring自带的dtd使XML编辑器smart一些,能够自动为你生成属性,判断节点/属性名称有没有拼错等。
6.还有更变态的简化配置方法
比如autoproxy,不过我觉得更简化就不可控了,所以没有采用。
相关文章推荐
- 使用import简化spring的配置文件 (转载)
- annotation 简化spring的配置文件bean
- spring与jpa整合 简化persistence.xml配置文件 使用属性文件 数据源dbcp访问数据库
- Spring之@Value 注解获取properties值(Spring 3的@value简化配置文件的读取)
- spring中使用 @value 简化配置文件的读取
- 简化Spring(1)--配置文件
- 电商平台学习笔记(四)——Spring配置Mybatis简化DAO层省略Mybatis核心配置文件
- 使用Spring 3的@value简化配置文件的读取
- 简化Spring(1)--配置文件http://www.blogjava.net/calvin/archive/2005/08/21/10530.html
- Spring 转载配置文件的三种方式
- 使用import简化spring的配置文件
- 使用Spring 3的@value简化配置文件的读取 (转)
- 使用import简化spring的配置文件
- spring3支持@value注解从配置文件中读取配置值,大大简化读取配置文件的代码@
- 使用Spring 3的@value简化配置文件的读取
- 参数配置文件properties--使用spring加载和简化读取
- 使用Spring 3的@value简化配置文件的读取
- Spring 学习笔记(5)—— 简化xml配置文件的配置方式
- 简化Spring(1)--配置文件
- 简化Spring(1)--配置文件