锁定老帖子 主题:SpringPython使用简单介绍
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (5)
|
||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | |||||||||||||
发表时间:2010-10-31
Spring的影响实在太大了,连Python也在向其靠拢了。 一直以为Spring只是跟Java非常亲密,原来Spring早就潜入Python了。今天本来只是想Spring如何应用在Python中,于是就Google了下,发现原来Python早已经有个叫SpringPython东东了。于是到其官网下载了springpython-reference.pdf,粗略的翻翻学习了下。感觉其实跟Spring Java非常的相似,只是类名等不同而已。其IoC、AOP、数据访问、事务等都差不多了。 于是我边看文档,边整理了一下。因为现在我还没有Python项目,用不上它,所以现在只是做个笔记,知道个大概,为以后应用它时能够快速定位做个准备。 AOP那一章节没有写,因为一是跟Spring非常的像,二是项目中一般都很少用它。
一、IoC容器 1、ObjectContainer和ApplicationContainer比较 ApplicationContainer继承ObjectContainer对象,和Spring Java一样,它同样是增强了功能,提供了Bean的pre-和post-创建逻辑。 任何实现了ApplicationContextAware的对象将会有额外的app_context属性,它代表了ApplicationContext对象的一个引用。
继承ObjectPostProcessor对象并且定义了post_process_after_initialization方法的任何对象,在它实例创建之后 ,ApplicationContext都会执行该方法。 继承springpython.context.DisposableObject对象并且定义了destroy或是destroy_method方法的对象,在ApplicationContext销毁时,都会执行该方法。我们可以把销毁实例、释放内存等工作放在该方法之中。 需要注意的是,当同时定义了destroy和destroy_method两个方法时,ApplicationContext会优先执行destroy方法;继承自DisposableObject的对象必须提供destroy或是destroy_method方法,否则会报错,错误日志会被记录在SpringPython日志文件中。
2、对象生命周期 SpringPython提供了对象的两种生命周期:SINGLETON和PROTOTYPE。 默认情况下为SINGLETON,当类实例化时,容器会注入对象所有属性。 使用方法和Spring Java一样:scope=“prototype”。
3、SpringPython的配置 目前常见的配置有两种:XMLConfig和YamlConfig。受到Spring JavaConfig的启发,通过扩展PythonConfig并且使用@Object装饰,我们可以用纯Python代码来配置Bean。同样的,我们可以通过扩展Config来定义自己的格式。 XMLConfig跟Spring Java 2.5 XSD非常相似,下面是一个简单的例子。
内部对象:
SpringPython支持多种集合属性:字典(dict)、列表(list)、属性(props)、集合(set、frozenset)、元组(tuple);
注意set和frozenset的关系和区别(http://docs.python.org/release/2.5.2/lib/types-set.html):
构造函数配置方法:
Python的基本类型(str, unicode, int, long, float, decimal.Decimal, bool和complex)在XML配置文件中有着不同的简短的表示方法:
同样的,XMLConfig也可以定义抽象(abstract="True")和使用继承(parent):
当在程序中需要引用一个抽象类型的对象时,必须加上属性(ignore_abstract=True),否则会引发AbstractObjectException异常:
4、对象工厂 SpringPython提供了两种类型的工厂:ReflectiveObjectFactory和PythonObjectFactory。它们很少被我们用到,主要是用在不的同配置扫描器中。
5、在运行时查询或是修改ApplicationContent ApplicationContext实例暴露了两个属性和一个方法使用我们在运行时能够知道其当前状态并且动态改变它:object_defs、objects、get_objects_by_type(type, include_type=True);
二、AOP编程
三、数据访问 1、数据库模板: 在没有使用数据库模板情况下,我们传统的写法如下:
在传统的数据库访问中,所有的数据库操作都是建立连接、执行查询、获取数据、释放连接,最后是返回结果。 下面是在使用了数据库模板情况下的做法:
从上面可以看出,在使用了模板后,程序所要做的,就是提供一个RowMapper,从而使它返回最终结果。 一种便利的RowMapper:SimpleRowMapper(TvShow)。它自动把数据表列和对象属性关联起来。 2、把数据行映射成字典
四、事务管理 1、事务模板TransactionTemplate
2、使用装饰@transactional
3、事务传播属性 当使用@transactional装饰时,同时也可以指定事务传播属性,比如:@transactional(["PROPAGATION_REQUIRED"])。 事务一共有4种传播属性: PROPAGATION_SUPPORTS:程序能够在有事务或是没有事务的环境中运行,也就是有没有无所谓; PROPAGATION_REQUIRED:如果当前没事务,则开始一个事务; PROPAGATION_MANDATORY:程序逻辑只能在事务中运行,如果没有,则产生异常; PROPAGATION_NEVER:与上面的相反,程序只能在无事务的环境中运行,如果有事务,则产生异常。
=========================================== 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-01
感觉不靠谱
|
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-01
jinhao7773 写道 感觉不靠谱 感觉IoC和事务还是不错的,而数据库模板用Django。
|
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-02
不是spring影响太大,是这帮人太二,而且完成照搬spring的东西至python那就更二.
楼主认同spring这种方式,应该是刚学习python,才会对这垃圾东西关注 |
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-03
如楼上所说,简直就是悲剧。
|
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-03
python要spring作甚?
感觉有些 ruby用spring的感觉.... |
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-03
超级潜水员 写道 不是spring影响太大,是这帮人太二,而且完成照搬spring的东西至python那就更二. 楼主认同spring这种方式,应该是刚学习python,才会对这垃圾东西关注 唉,悲剧~~这样的抱怨批评跟没说一样,没有任何见解! |
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-03
People fear what they don't know
|
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-03
最后修改:2010-11-03
obullxl 写道 超级潜水员 写道 不是spring影响太大,是这帮人太二,而且完成照搬spring的东西至python那就更二.
楼主认同spring这种方式,应该是刚学习python,才会对这垃圾东西关注 唉,悲剧~~这样的抱怨批评跟没说一样,没有任何见解! 要见解是吧? 见解就是"要自己思考,不要盲目崇拜" 你硬要用JAVA那套来往Python身上套,这不是个悲剧么,看上面列的那一大堆config,头就大 你非要把飞机的机翼放到汽车上,还说,"嗯.这样会让这个车看起来更像飞机".. |
||||||||||||||
返回顶楼 | ||||||||||||||
发表时间:2010-11-04
attol 写道 obullxl 写道 超级潜水员 写道 不是spring影响太大,是这帮人太二,而且完成照搬spring的东西至python那就更二. 楼主认同spring这种方式,应该是刚学习python,才会对这垃圾东西关注 唉,悲剧~~这样的抱怨批评跟没说一样,没有任何见解! 要见解是吧? 见解就是"要自己思考,不要盲目崇拜" 你硬要用JAVA那套来往Python身上套,这不是个悲剧么,看上面列的那一大堆config,头就大 你非要把飞机的机翼放到汽车上,还说,"嗯.这样会让这个车看起来更像飞机".. 很纳闷,1、什么地方体现出所谓的盲目崇拜?2、什么地方体现了所谓的汽车看起来像飞机?人生就是一个悲剧! |
||||||||||||||
返回顶楼 | ||||||||||||||