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

调用了3次Spring BeanPostProcessor

何骞尧
2023-03-14

我的代码和配置文件如下

BeanPostProcesssor实现

public class BeanPP implements BeanPostProcessor{

    @Override
    public Object postProcessBeforeInitialization(Object o, String string) throws BeansException {
        System.out.println("---before initialization ------");
        return o;
        //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public Object postProcessAfterInitialization(Object o, String string) throws BeansException {
        System.out.println("----After initializaion ---- ");
        return o;
        //To change body of generated methods, choose Tools | Templates.
    }        
}

客户Bean

public class Customer {        
  private String name;

  public String getName() {
      System.out.println("..getName.....");
      return name;
  }

  public void setName(String name) {
      System.out.println("..setName.....");
      this.name = name;
  }

  @PostConstruct
  public void init(){
      System.out.println("....Bean is going though init method");
  }

  @PreDestroy
  public void destory(){
      System.out.println("....Bean is going to destroy.......");
  }
}
@Configuration
public class AppConfig {
    @Bean(name="customer")
    public Customer getCustomer(){
        return new Customer();
    }
    @Bean
    public BeanPP getPP(){
        return new BeanPP();
    }

}

主类

public class MainApp {

    public static void main(String[] args) {
        ApplicationContext appContext = new AnnotationConfigApplicationContext(AppConfig.class);
        Customer customer = (Customer)appContext.getBean("customer");
        customer.setName("test user ");
        System.out.println(".Name is .."+customer.getName());
    }
}

输出

---在初始化之前-----在初始化之后----在初始化之前----在初始化之前----在初始化之前----在初始化之前----...bean通过init方法----在初始化之后----...setname.......GetName.....名称为..测试用户

共有1个答案

家志学
2023-03-14

普通bean工厂允许对后处理器进行编程注册,应用于通过该工厂创建的所有bean。

http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/beanPostProcessor.html

您已经定义了3个bean,AppConfig、customer和PP。bean post处理器将在每次bean创建后执行。如果你有3个bean,它将被执行3次。

@Configuration
public class AppConfig {
    @Bean(name="customer")
    public Customer getCustomer(){
        return new Customer();
    }
    @Bean
    public BeanPP getPP(){
        return new BeanPP();
    }
}
 类似资料:
  • 问题内容: 使用JMapViewer,可以识别该组件的异常行为。我正在使用DefaultMapController来获取地图位置(纬度,经度)。 运行代码,在按下鼠标左键后,方法mouseClicked()被调用多次(2x)。更换后 与 代码正常工作,该方法仅被调用1x。问题出在哪里?是库内部的错误还是语法错误或不安全?如何避免这个问题?谢谢你的帮助。 问题答案: 您的extensions ,在实

  • 运行在Mojarra 2.1.13、PrimeFaces 3.5、JDK 1.6.x上。和Apache Tomcat 7.0.27,谢谢! 多谢了。

  • 问题内容: 我有使用JQuery..I米一个问题在我的代码发送字段名和序列号,其通过获取其数据的ctrller 和并且与序列表中没有given..And生成预览显示面板更新字段名与插入的字段..现在,我再次尝试更改字段名称。tat是现在,当我单击生成的显示面板字段时,相应的设置将打开,我将尝试立即更改字段名称 两者和都相同..在我发送的是字段名和序列号 在功能2中,我要发送相同的字段名和(但其他值

  • 问题内容: 如果我在节点中编写以下程序: 然后在服务器上单击两次,在服务器上看到两次- 我不确定为什么单个HTTP请求导致两次执行。 问题答案: 那是正常现象-您的浏览器拨打了多个电话。 例如,大多数浏览器都会呼叫来获取。 尝试记录网址: 然后您会看到正在调用的内容。

  • 在我的应用程序中,我将TextWatcher放在EditText上。当我更改EditText的文本时,TextWatcher的事件会被调用两次。 我正在使用模拟器来运行应用程序。

  • 问题内容: 关于的简单代码。是SessionScoped Bean,是RequestScoped Bean 内 我的问题是被叫很多。会告诉我们该方法在什么阶段被调用。首次加载页面时,请在阶段6-进行约 5次 呼叫。该页面上有一个,因此我在其中键入一些内容,然后单击(命令按钮)。然后在阶段1-> 4期间再呼叫 12次 。每个阶段调用此方法 3-4次 。然后,此属性的get 方法的setter方法(即