当前位置: 首页 > 知识库问答 >
问题:

在BeanPostProcessor之前调用PostConstruct

令狐昂雄
2023-03-14

我现在刚到Spring。我试图遵循调用PostConstruct和BeanPostProcessor的顺序。

根据我所学,以下是顺序:-

    null
    null

SpringConfig文件foo.xml删除了beans标记上下文:component-scan base-package=“SpringTest”

@Component
public class MySpring implements ApplicationContextAware,BeanPostProcessor{

public static int temp =0;

public MySpring(){
    System.out.println("Initializing MySpring Constructor");
}

@PostConstruct
public void temp(){
    System.out.println("PostConsturct" + this.getClass());
    temp++;
}

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    System.out.println("Before BPP " + bean.getClass());

    return this;
}

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
    System.out.println("After BPP " + bean.getClass());

    return this;
}

public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    System.out.println("Initializing ApplicationContext");

}}

回应

  1. 初始化MySpring构造函数
  2. 初始化ApplicationContext
  3. PostConsturctClass SpringTest.MySpring
  4. 在属性设置类SpringTest.MySpring后
  5. 在BPP类org.springframework.context.event.EventListenerMethodProcessor
  6. 之前
  7. PostConsturctClass SpringTest.MySpring
  8. 在属性设置类SpringTest.MySpring后
  9. 在BPP类SpringTest.MySpring之后
  10. 在BPP类org.springframework.context.event.DefaultEventListenerFactory之前
  11. PostConsturctClass SpringTest.MySpring
  12. 在属性设置类SpringTest.MySpring后
  13. 在BPP类SpringTest.MySpring之后

MySpring.temp值为3表示调用了3次。

有人能帮我在上面...

共有1个答案

章心水
2023-03-14

它被调用三次,因为您要用MySpringbean替换每个bean。

你的方法

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    System.out.println("Before BPP " + bean.getClass());

    return this;
}

返回这个,实际上说明您当前后处理的bean对象应该被MySpring对象替换。您可以通过尝试从applicationcontext获取任何其他bean来验证这一点。

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigurationBean.class);
ctx.getBean(ConfigurationBean.class);
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
    System.out.println("Before BPP " + bean.getClass());

    return bean;
}

ApplicationContext初始化MySpring实例时,CommonAnnotationBeanPostProcessor已经初始化,因此将处理bean。在MySpring完全初始化后,Spring检测到它是BeanPostProcessor并注册它。它在CommonAnnotationBeanPostProcessor之前注册它(BeanPostProcessor实例有优先级设置)。

 类似资料:
  • 我的代码和配置文件如下 BeanPostProcesssor实现 客户Bean 主类 输出 ---在初始化之前-----在初始化之后----在初始化之前----在初始化之前----在初始化之前----在初始化之前----...bean通过init方法----在初始化之后----...setname.......GetName.....名称为..测试用户

  • 问题内容: 如果没有线程正在等待,使用,任何来电或没有任何效果。我有一种情况,如果在等待集为空时调用,则后续调用不应将线程置于等待状态。如何做到这一点?信号量可能是我能想到的一种解决方案。有没有更优雅的解决方案? 问题答案: 这种情况似乎非常适合。呼叫而不是和而不是等待。

  • 问题内容: 问题 我正在使用内联函数定义设置反应 然后在DOM引用中未设置 我的理解是,回调应该在安装期间运行,但是在ref回调函数 之前* 调用添加语句揭示。 * 例如,我看过的其他代码示例在github上的讨论都表明相同的假设,应该在中定义的任何回调 之后调用,甚至在对话中也要说明 那么在所有的ref回调都执行完之后,componentDidMount是否被触发? 是。 我正在使用反应 15.

  • 我已经开始为一个简单的应用程序开发后端,并且我已经建立了一个数据库类(名为),所有文件都将与之通信。在我的中,我有以下内容: 它是一个,所以我可以从其他文件中访问。 在我的其他文件中,我有以下帮助可读性:(因为它是一个类,它将通过引用传递) 在我的课程中: 当我构建代码时,它构建得很好。 运行时,应用程序立即崩溃与。错误消息是: 我已尝试在类中的init函数上放置断点。它没有到达断点。 我已尝试将

  • 问题内容: 我有一个jQuery对话框打开,然后进行AJAX调用。我想这样做,以便如果关闭对话框或按下“取消”按钮,则取消AJAX调用,并且不调用其回调函数。我可以想到一些使用变量的方式,例如: 但是,从某种程度上来说,这对我来说很肮脏,并且实际上并没有阻止AJAX调用完成。是否有内置的方式来取消正在进行的AJAX呼叫? 问题答案: 好的,因此基于使用$ .get函数返回的XmlHttpReque