gpt4 book ai didi

java - 为什么在 junit 测试期间多次初始化 bean?

转载 作者:行者123 更新时间:2023-11-29 07:26:22 25 4
gpt4 key购买 nike

你能帮我理解为什么会发生以下情况吗?我有以下 bean:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class TestBean implements BeanPostProcessor {
public void init() {
System.out.println("Initialized!");
}

public void destroy() {
System.out.println("Destroyed!");
}

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization");
return null;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization");
return null;
}
}

具有以下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean class="TestBean" init-method="init" destroy-method="destroy"/>
</beans>

和以下 junit 测试:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:beans1.xml"})
public class TestBeanTest {

@Autowired
private TestBean collectionBean;

@Test
public void testCollectionBean() {
}
}

现在,令我惊讶的是,如果我运行该单元测试,“postProcessBeforeInitialization”和“postProcessAfterInitialization”各打印 5 次。是什么原因?在 bean 初始化期间,它们不应该只打印 1 次吗?提前致谢!

最佳答案

回顾一下我的评论:

TestBean bean 后处理器 postProcessBeforeInitialization 方法稍作改动:

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization " + beanName);
return null;
}

和可能的最小 Spring 依赖:org.springframework:spring-context:5.0.2.RELEASE

您的代码的输出是:

postProcessBeforeInitialization org.springframework.context.event.internalEventListenerProcessor
postProcessBeforeInitialization org.springframework.context.event.internalEventListenerFactory
postProcessBeforeInitialization TestBeanTest

结论:这个bean只被post processor处理了一次,其余都是Spring自带的bean。你得到 5 而我只得到 3 的事实是我们使用的不同依赖集。

此外,请注意甚至不考虑(打印)TestBean,因为它不是 bean,而是 bean 后处理器。

关于java - 为什么在 junit 测试期间多次初始化 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com