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
      

        Issue Links

          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:
              Juergen Hoeller
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:
                Days since last comment:
                13 weeks ago