Spring BeanDefinition getDestroyMethodName始终返回null

时间:2017-10-05 11:15:17

标签: java spring

我正在尝试分析bean配置,我想在特定情况下记录一些消息。我认为BeanFactoryPostProcessor是正确的地方。但是,当我遍历beanDefinitions并调用getDestroyMethodNamegetInitMethodName时,它始终返回null。

我通过@PostConstruct@PreDestroy指定了init和destroy方法 我正在使用注释配置:

@ComponentScan
@Configuration
public class SpringConfig {
}

豆:

@Component
//@Scope("prototype")
public class SomeBean{

  @PostConstruct
  public void init() {
      //Do stuff...
  }

  @PreDestroy
  public void destroy() {
      //Do stuff...
  }
}

的BeanFactoryPostProcessor:

@Component
public class LogAlertBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

  @Override
  public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
      String[] beanDefinitionNames = beanFactory.getBeanDefinitionNames();

      AbstractBeanDefinition beanDefinition = null;
      for (String beanDefinitionName : beanDefinitionNames) {
          beanDefinition = (AbstractBeanDefinition) beanFactory.getBeanDefinition(beanDefinitionName);
      //beanDefinition.getDestroyMethodName() always NULL!!!
          if (beanDefinition.isPrototype() && beanDefinition.getDestroyMethodName() != null) { 
              System.out.println("Destroy method in \"" + beanDefinitionName + "\" bean won't be called!!!");
          }
      }
   }
}

在任何情况下,方法getDestroyMethodNamegetInitMethodName都会返回null,尽管调用了init和destroy方法。有谁知道为什么会这样?

0 个答案:

没有答案