1
3
正在添加为新答案,尝试解决开放点…
Spring针对不同的初始化策略有具体的应用上下文实现。最常用的是genericapplicationContext(manual)、xmlapplicationContext(xml文件)和webapplicationContext(非常类似于xmlapplicationContext,但是为web使用而定制的)。它们都实现了公共接口:IApplicationContext,这是访问这些容器的首选方式。 不规则地用代码更改注册通常意味着您需要直接使用特定的子类。对于GenericApplicationContext和StaticApplicationContext,这是很自然的,但通常将xmlApplicationContext视为仅限XML,这样就“固定”了XML定义。
SpringHelper就是这样做的,默认情况下,Spring中的所有对象都是单例对象。可以通过使用false调用ObjectDefinitionBuilder的Setsingleton方法来更改此行为。
Spring使用对象名(ID)来区分不同的实现。因此,如果您想让特定的类型为特定的实例提供服务,以防有许多备选方案,那么您应该按名称引用这个特定的实例。如果您使用的是autowiring,并且您的对象依赖于接口isomeservice,并且只有一个注册的对象实现了它,那么autowiring可以设置它而不产生歧义。
从前面的回答继续,这将以“service”的名称注册serviceimplementationa类型的singleton。这个对象带有所有它实现的接口(当然还有它的具体类型)的自动连接候选者。
如前所述,这非常重要。该名称是该上下文中的唯一ID(父上下文可能具有同名的对象),可以用于访问特定的对象注册。简而言之,如果其他框架将类型关联为对象注册的键,那么Spring使用名称。 |
2
3
在单元测试中,Unity使用代码配置,Spring.net使用XML(app.config)配置,这有点像苹果和橙子的比较。 如果您使用XML路由,那么您可以注释掉旧的实现A,并将B实现定义为要使用的实现-配置的内容都是正确的?另一个选项是为每个场景(配置设置)提供专用的XML文件,并通过上下文的资源定义将其包含在内(您现在有了内联资源)。其他选项包括文件系统和程序集, see the web configuration section 在Spring.net的手册中有一个很好的例子。 如果您选择代码配置路径,我建议您检查 Spring.NET Recoil 即将来临 CodeConfig . |
BlackICE · Spring.Net框架日落?[已关闭] 11 年前 |