Skip to content

Add support for Kotlin autowired constructor with optional parameters [SPR-15847] #20402

Closed
@spring-projects-issues

Description

@spring-projects-issues

Abhijit Sarkar opened SPR-15847 and commented

@Component
class A(val str: String = "whatever", val b: B) { 
// class A constructor(val str: String = "whatever", @Autowired val b: B) doesn't work either 
}
@Component
class B {
}
@SpringBootApplication
class DemoApplication

fun main(args: Array<String>) {
    SpringApplication.run(DemoApplication::class.java, *args)
}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'a' defined in file [<elided>/A.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.demo.A]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.example.demo.A.<init>()
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1242) ~[spring-beans-5.0.0.RC3.jar:5.0.0.RC3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1141) ~[spring-beans-5.0.0.RC3.jar:5.0.0.RC3]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.demo.A]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.example.demo.A.<init>()
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:84) ~[spring-beans-5.0.0.RC3.jar:5.0.0.RC3]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1234) ~[spring-beans-5.0.0.RC3.jar:5.0.0.RC3]
	... 16 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.example.demo.A.<init>()
	at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_131]
	at java.lang.Class.getDeclaredConstructor(Class.java:2178) ~[na:1.8.0_131]
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:79) ~[spring-beans-5.0.0.RC3.jar:5.0.0.RC3]
	... 17 common frames omitted

Affects: 5.0 RC3

Issue Links:

Referenced from: commits ef68ccd

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)type: enhancementA general enhancement

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions