Uploaded image for project: 'Spring Framework'
  1. Spring Framework
  2. SPR-15847

Add support for Kotlin autowired constructor with optional parameters

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Complete
    • Affects Version/s: 5.0 RC3
    • Fix Version/s: 5.0 RC4
    • Component/s: Core
    • Labels:
    • Last commented by a User:
      true

      Description

      @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
      

        Activity

        Hide
        sdeleuze Sébastien Deleuze added a comment -

        Abhijit Sarkar Could you please test latest snapshots to see if this commit provides the right behavior? (I did some integration tests but for such change an extra check on your side would be useful)

        Show
        sdeleuze Sébastien Deleuze added a comment - Abhijit Sarkar Could you please test latest snapshots to see if this commit provides the right behavior? (I did some integration tests but for such change an extra check on your side would be useful)
        Hide
        asarkar Abhijit Sarkar added a comment -

        Verified that the application starts with Spring 5.0.0.BUILD-SNAPSHOT.

        Show
        asarkar Abhijit Sarkar added a comment - Verified that the application starts with Spring 5.0.0.BUILD-SNAPSHOT .

          People

          • Assignee:
            sdeleuze Sébastien Deleuze
            Reporter:
            asarkar Abhijit Sarkar
            Last updater:
            Stéphane Nicoll
          • Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:
              Days since last comment:
              4 weeks, 2 days ago