java - 为什么范围原型(prototype)不适用于实现 BeanPostProcessor 的 spring bean

标签 java spring scope

我有一个Bean,它实现 BeanPostProcessor

public class ScopeTest implements BeanPostProcessor {

    public ScopeTest() {
        System.out.println("ScopeTest()");
    }

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

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

我已经在 Spring bean 配置文件中将其配置为 scope 作为 prototype

<bean id="st" class="com.test.ScopeTest" scope="prototype" />

我使用 ApplicationContext 运行代码

public class App {
    public static void main(String[] args) {
        ApplicationContext container = new ClassPathXmlApplicationContext("spring.xml");
    }
}

我观察到的输出是

ScopeTest()

这里是什么让容器为没有 getBean() 标记为 prototype 的 bean 创建对象?

最佳答案

原型(prototype)范围在这里不起作用,因为 BeanPostProcessor 实现仅在 Spring 应用程序上下文启动时发现、实例化和注册。这些 bean 按类型(实例化之前/之后等)排序并存储在列表中。从那里,后处理器 bean 被应用于进一步的 bean 创建。与“普通”bean(如服务 bean)相比,它们在启动后不会再次从上下文中检索。因此不考虑它们适用的范围。

关于java - 为什么范围原型(prototype)不适用于实现 BeanPostProcessor 的 spring bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30069656/

相关文章:

java - 以最小的延迟将视频设备流式传输到 Windows

java - 如何将 "mvn spring-boot:run"重命名为 "mvn someName:run"?

spring - 如何修复 springfox 中的 "Security scope definition global could not be resolved"?

JavaScript - 单击图像,然后单击 div,然后将图像移动到 div

java - 将 SAN 添加到 SSL 证书(在 Java 中)

java - split 方法在数组中留出空间

java - Lambda 表达式在 Java 8 中不起作用?

java - 我如何使用 telegram lib 在 java 中验证并向我的电话号码发送消息?

java - 在java中的方法内创建类实例的范围

ios - 有没有办法允许某些类访问某些其他类的私有(private)属性?