Spring for Python 与 Spring for Java 相比如何
我是Java的Spring框架(Rod Johnson)的狂热粉丝。我正在学习Python,很高兴能找到关于Spring for Python的信息。我很想听听社区对这两种春天的味道的比较的看法。它是否符合Python的范式等。
我是Java的Spring框架(Rod Johnson)的狂热粉丝。我正在学习Python,很高兴能找到关于Spring for Python的信息。我很想听听社区对这两种春天的味道的比较的看法。它是否符合Python的范式等。
依赖关系注入框架在动态类型语言中并没有那么有用。例如,请参阅演示文稿依赖注入:至关重要还是完全不相关?在Java中,依赖关系注入框架提供的灵活性至关重要,而在Python中,它通常会导致不必要的复杂性。
这并不意味着这些原则是错误的。请参阅此示例,了解如何使用简单的习语实现类之间的松散耦合:
# A concrete class implementing the greeting provider interface
class EnglishGreetingProvider(object):
def get_greeting(self, who):
return "Hello %s!" % who
# A class that takes a greeting provider factory as a parameter
class ConsoleGreeter(object):
def __init__(self, who, provider=EnglishGreetingProvider):
self.who = who
self.provider = provider()
def greet(self):
print(self.provider.get_greeting(self.who))
# Default wiring
greeter = ConsoleGreeter(who="World")
greeter.greet()
# Alternative implementation
class FrenchGreetingProvider(object):
def get_greeting(self, who):
return "Bonjour %s!" % who
greeter = ConsoleGreeter(who="World", provider=FrenchGreetingProvider)
greeter.greet()
披露:我是Spring Python的项目负责人,所以你可以认为我的观点有偏见。
我发现Spring Python提供的几个选项很有用,包括:面向方面的编程,依赖注入,远程处理,安全性和轻松的数据库访问。
正如他们所说,面向方面的编程比java更容易用python实现。但是Spring Python可以很容易地添加到现有的python模块中,而无需编辑它们的源代码。其他解决方案需要元编程或修改原始源代码。我已经有一个人访问我们的论坛,询问如何向PyGame应用程序添加拦截器,这样他就可以不显眼地“点击”一些代码。
许多人很快认为“依赖注入”或“IoC”立即意味着“XML配置文件”。事实并非如此。虽然我们支持XML配置,但只需直接使用python装饰器即可。
我已经知道有一家公司正在使用Spring Python作为其系统的关键部分。他们有兴趣进行改进,添加新功能,并且通常将其用作解决方案的一部分。他们还尝试在jython中运行它,以防引起您的兴趣。
在一天结束时,我的建议是检查所有功能,看看它们是否适合您的需求。这是增加了不必要的复杂性还是简洁的价值,只能由您自己决定。您不必使用所有内容;只有你需要的。为了获得有关可用内容的更多信息,我邀请您查看我在SpringOne Americas 2008会议上介绍的Spring Python简介。