- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好的,这是我的用例:
我有以下类,每个类都封装了下一个类的实例。所以:
A -> B -> C -> D
例如:在 A 类中,我有一个 B 类的实例,在 B 类中我有一个 C 类的实例,依此类推。
嗯,我正在尝试将加载\初始化\注入(inject)逻辑转换为混合 Spring 系统。一般想法是 B、C 和 D 需要或多或少为 ApplicationContextAware
。我的意思是,他们实际上不会实现该接口(interface),而是需要 ApplicationContext
作为构造函数参数。这样,在混合方法中(开发人员不使用 Spring 来初始化实例),他们必须至少传入 ApplicationContext
这样就可以连接额外的bean。问题是,为了让 Spring 容器加载 bean,我现在必须传入 ApplicationContext
在 XML 中。但据我所知,没有什么好的方法可以做到这一点。
我尝试过这样的事情:
public class ApplicationContextPlaceholder implements ApplicationContextAware {
private ApplicationContext _applicationContext;
public void setApplicationContext( final ApplicationContext applicationContext ) throws BeansException {
_applicationContext = applicationContext;
}
public ApplicationContext getApplicationContext() {
return _applicationContext;
}
}
<bean id="a" class="com.company.A">
<constructor-arg>
<bean id="applicationContext" class="com.company.ApplicationContextPlaceholder" />
</constructor-arg>
</bean>
但显然这没有任何意义,因为 ApplicationContextPlaceholder
不是真正 ApplicationContext
。我还寻找了引用 XML 内上下文的方法,但我没有找到任何东西。
有人知道解决此类问题的优雅方法吗?
编辑#1:
我正在考虑,我可以有 ApplicationContextPlaceholder
还实现ApplicationContext
然后委托(delegate)给注入(inject)的上下文,然后我突然想到,也许,只是也许这已经在 Spring 中了……但据我所知,没有。
编辑#2:
每个类(class)需要 ApplicationContext
的原因是如果开发人员希望覆盖链中的一个类(为了论证,例如,C)。在这种情况下,C 的子类仍然需要通过 Spring 加载 D。
最佳答案
除非类提供额外的管道功能,否则您应该避免公开 ApplicationContext
。引用 Spring 引用:in general you should avoid it, because it couples the code to Spring and does not follow the Inversion of Control style
.
如果您要提供额外的功能(例如,可能是使用 ApplicationContext
来组装对象的工厂类),那么谨慎的做法是实现 ApplicationContextAware
,因为您的功能已经与 Spring 绑定(bind)在一起。
如果您考虑过您的dependency injection替代方案并决定在您的 bean 中注入(inject) ApplicationContext
,您的 ApplicationContextPlaceholder
类(我会远离 Placeholder
前缀以避免与 Spring property placeholders 产生任何混淆)当然是一个解决方案。 (既然它是您自己的类,为什么不扩展 ApplicationObjectSupport
以获得额外的功能。)
此类需要在您的配置中定义和初始化,例如:
<bean id="appCtxHolder" class="ApplicationContextHolder" />
由于 ApplicationContextHolder
实现了 ApplicationContextAware
,Spring 在初始化时会将 ApplicationContext
注入(inject)到 appCtxHolder
中。您可以将它用于构造函数注入(inject),例如:
<bean id="a" class="com.company.A">
<constructor-arg>
<bean factory-bean="appCtxHolder" factory-method="getApplicationContext" />
</constructor-arg>
</bean>
关于java - 鸡和蛋 Spring Bean 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8045045/
我正在尝试使用“sudo easy_install appscript”在 mac 上安装 py-appscript。命令运行,我收到一条消息说“Installed/Library/Python/..
我是 Python 新手,我只是想了解它的包是如何工作的。大概 eggs 是某种包装机制,但什么是它们所扮演角色的快速概述,可能是关于它们为什么有用以及如何创建它们的一些信息? 最佳答案 Note:
我有一个模型: class Foo(models.Model): pass 我想给它添加一个类型属性。有固定数量的类型。现有的应该都具有默认类型。所以我添加了类型: class Type(mo
我是一名优秀的程序员,十分优秀!