Skip to content

NPE thrown for nonexistent default-destroy-method in XML config #30301

@edfeff

Description

@edfeff

Affects: v6.0.7


When I configure the default-destroy-method in XML config and there is a bean that does not have a destroy method, a NullPointerException is thrown when closing the ApplicationContext.

Example Config and Code

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd"
  default-init-method="myInit"
  default-destroy-method="myDestroy">

  <bean id="a" class="com.wpp.core.c1.s1_6._3.AInit"/>
  <bean id="b" class="com.wpp.core.c1.s1_6._3.BDestroy"/>

</beans>
package com.wpp.core.c1.s1_6._3;
public class AInit {
  public void myInit() {
    System.out.println("A myInit");
  }
}
package com.wpp.core.c1.s1_6._3;
public class BDestroy {
  public void myDestroy() {
    System.out.println("B myDestroy");
  }
}
package com.wpp.core.c1.s1_6._3;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DefaultInitAndDestroyDemo {
  public static void main(String[] args) {
    var context = new ClassPathXmlApplicationContext("com/wpp/core/c1/s1_6/_3/DefaultInitAndDestroyDemo.xml");
    context.close();
  }
}

Exception

09:59:03.853 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext -- Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@880ec60
09:59:04.048 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader -- Loaded 2 bean definitions from class path resource [com/wpp/core/c1/s1_6/_3/DefaultInitAndDestroyDemo.xml]
09:59:04.088 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory -- Creating shared instance of singleton bean 'a'
A myInit
09:59:04.123 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory -- Creating shared instance of singleton bean 'b'
09:59:04.194 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext -- Closing org.springframework.context.support.ClassPathXmlApplicationContext@880ec60, started on Fri Apr 07 09:59:03 CST 2023
B myDestroy
09:59:04.197 [main] WARN org.springframework.beans.factory.support.DefaultListableBeanFactory -- Destruction of bean with name 'a' threw an exception
java.lang.NullPointerException: Cannot invoke "java.lang.reflect.Method.getParameterCount()" because "destroyMethod" is null
	at org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:278)
	at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:238)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:587)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:559)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1189)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:520)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1182)
	at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1084)
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1053)
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1003)
	at com.wpp.core.c1.s1_6._3.DefaultInitAndDestroyDemo.main(DefaultInitAndDestroyDemo.java:25)

Related Issues

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)type: regressionA bug that is also a regression

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions