Python的Spring与Java的Spring有什么区别
我非常喜欢Java的Spring框架(由Rod Johnson开发)。现在我在学习Python,发现了Python版的Spring,感到很兴奋。我想听听大家对这两种Spring的看法,特别是它们在Python的使用上是否合适,能不能很好地融入Python的编程风格等等。
3 个回答
不错的内容。我之前用过Spring Java和Spring Dot Net,现在开始学习Spring Python。Python对程序员来说一直比较简单,尤其是写起来很方便。我觉得Spring Dot Net有点让人困惑,但Spring Java和Python看起来很相似。我相信它们之间有一些不同之处,但到目前为止,我对Python的Spring实现还没有感到太困惑。
依赖注入框架在动态类型语言中并没有那么有用。比如,可以看看这个演讲 依赖注入:至关重要还是完全无关紧要? 在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提供的几个功能都很有用,包括:面向切面编程、依赖注入、远程调用、安全性和简单的数据库访问。
面向切面编程,简单来说,用Python实现起来比用Java要容易得多。Spring Python让你可以在不修改现有Python模块源代码的情况下,轻松地添加这个功能。其他的解决方案则需要进行元编程或者修改原始源代码。我已经看到有人在我们的论坛上询问如何在PyGame应用中添加一个拦截器,以便他可以不打扰地“插入”一些代码。
很多人会很快认为“依赖注入”或“IoC”就意味着“XML配置文件”。其实并不是这样。虽然我们支持XML配置,但你可以直接使用Python装饰器来实现。
我知道有一家公司正在将Spring Python作为他们系统的一个关键部分。他们希望进行改进,添加新功能,并将其作为解决方案的一部分。他们还尝试在jython中运行它,可能这会引起你的兴趣。
总的来说,我的建议是仔细看看所有功能,看看有没有适合你需求的。是否增加了不必要的复杂性,还是提供了简洁的价值,只有你自己才能判断。你不需要使用所有功能,只需使用你需要的部分。想了解更多可用的信息,我邀请你查看我在2008年SpringOne美洲大会上展示的Spring Python简介。