对于Python,是否存在与Guice(http://code.google.com/p/google-guice)等效的框架?
Spring Python是基于Java的Spring Framework和Spring Security的分支,针对Python.该项目目前包含以下功能:
控制反转(依赖注入) - 使用经典XML或python @Object装饰器(类似于Spring JavaConfig子项目)将事物连接在一起.虽然@Object格式与Guice风格(每个类中的集中布线与布线信息)不同,但它是连接python应用程序的有效方式.
面向方面编程 - 在事务,安全性和缓存等事物中,在横向编程范例(而不是垂直OOP继承)中应用拦截器.
DatabaseTemplate - 从数据库中读取需要打开游标,读取行和关闭游标以及异常处理程序的单调循环.使用此模板类,您只需要SQL查询和行处理函数.Spring Python完成剩下的工作.
数据库事务 - 使用事务包装多个数据库调用可能会使您的代码难以阅读.此模块提供了多种方法来定义事务,而不会使事情变得复杂
安全性 - 插件安全拦截器,用于锁定对方法的访问,同时利用身份验证和域授权.
远程处理 - 很容易将本地应用程序转换为分布式应用程序.如果您已经使用IoC容器构建了客户端和服务器部分,那么从本地到分布式只是一个配置更改.
示例 - 为了帮助演示Spring Python的各种功能,已经创建了一些示例应用程序:
PetClinic - Spring Framework的示例Web应用程序已经使用python web容器从头开始重建,包括:CherryPy.去看一下如何使用这个框架的例子.(注意:将来,其他python Web框架将添加到此列表中).
Spring Wiki - Wiki是存储和管理内容的强大方式,因此我们创建了一个简单的演示版!
Spring Bot - 使用Spring Python构建一个小型机器人来管理开源项目的IRC频道.
我喜欢这个简单而整洁的框架.
http://pypi.python.org/pypi/injector/
作为正式模式的依赖注入在Python中比在其他语言中没那么有用,主要是因为它支持关键字参数,可以轻松地模拟对象,以及它的动态特性.
也就是说,协助此过程的框架可以从较大的应用程序中移除大量的锅炉板.这就是Injector可以提供帮助的地方.它自动且可传递地提供关键字参数及其值.作为一个额外的好处,Injector通过使用Module来鼓励很好地划分代码.
虽然受到Guice的启发,但它并没有盲目地复制它的API.提供Pythonic API胜过忠诚.
我没有使用它,但Spring Python框架基于Spring并实现了Inversion of Control.
在Python项目中似乎也有一个Guice:snake-guice
作为monkeypatching的替代品,我喜欢DI.一个新兴的项目,如http://code.google.com/p/snake-guice/可能符合要求.
或者参见Dennis Kempin撰写的关于Python的Dependency Injection的博客文章(08年8月).
pinject(https://github.com/google/pinject)是一个新的替代方案.它似乎由Google维护,并遵循与Guice(https://code.google.com/p/google-guice/)类似的模式,它是Java版本.
除此之外:
Zope组件架构
pyContainer