如何在factoryBean返回实例之前处理bean



我发现在调用factoryBean.getObject()之前不可能对bean进行后处理。'resultingBean’是某个bean的依赖项,该bean在开始时被初始化,因此它首先被实例化。请参阅,在"MyFactoryBean"中构造"resultingBean"之前,我需要"myBeanPostProcessor"对"myBean"执行某些操作。既不是惰性初始化,也不依赖于帮助。不管怎样,总是首先调用"MyFactoryBean.getObject()"。

<bean id="myBean" class="example.MyBean" />
<bean id="myBeanPostProcessor" class="example.MyBeanPostProcessor" />
<bean id="resultingBean" class="example.MyFactoryBean" depends-on="myBean"/>

知道该怎么处理吗?我特意选择BeanPostProcessor,因为这个要求应该处理在junit@Before方法之前设置mocito mocks。。。问题是,在@Before方法中设置这些mock为时已晚,因为您需要在上下文初始化时使用它们。

没有很多方法可以做到这一点,包括ExecutionListeners、ContextLoaders、BeanFactoryPostprocessor、Runner和许多其他方法。

我用的是springockito,它在飞行中嘲笑我的豆子。

这是原本完美的弹簧测试框架的一个小缺点。

我真的不同意使用这样的mock(即用于集成测试),但我理解你的问题。

您需要使用在InitializingBean之前调用的ApplicationContextAware接口和BeanPostProcessor。

然而,你的工厂总是会首先被调用,所以考虑一个不同的选项,比如新的java风格的配置或重构(看起来你可能有排序循环依赖关系)

除了我需要更多的信息。

不确定我是否很好地理解了你的问题,但你不能简单地创建另一个上下文文件,比如test-override-context.xml,并在那里重新定义bean,最后一个同名的bean在上下文中生效。

test-override-context.xml文件中:

<import resource="my-base-resource.xml"/>
<bean id="myBean" class="MyMockedBean">

最新更新