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

Detect LoadTimeWeaver bean when declared through @Bean method as well

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Complete
    • Affects Version/s: 3.2.4, 4.0 M2
    • Fix Version/s: 4.3 RC2
    • Component/s: Core
    • Labels:
      None
    • Last commented by a User:
      true

      Description

      This may be a Java-config problem only. I haven't tried it with XML config.

      I'm configuring a LocalContainerEntityManagerFactoryBean, and I want to enable load time weaving. @EnableLoadTimeWeaving works (I see in the log that it found addTransformer on the ClassLoader and created a load time weaver), but setLoadTimeWeaver is never called on the LocalContainerEntityManagerFactoryBean.

      LocalContainerEntityManagerFactoryBean implements LoadTimeWeaverAware, so my (possibly incorrect) assumption was that Spring should set the LoadTimeWeaver property, but it does not. If my assumption was incorrect, the documentation should be updated to indicate that you must call this method manually. If my assumption was correct, there is a bug here, because Spring is not calling this method.

      Instead, I have to do this in my configuration:

      @Configuration
      ...
      @EnableLoadTimeWeaving
      ...
      public class RootContextConfiguration
      {
          ...
          @Inject LoadTimeWeaver loadTimeWeaver;
          ...
      
          @Bean
          public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean()
          {
              ...
              LocalContainerEntityManagerFactoryBean factory =
                      new LocalContainerEntityManagerFactoryBean();
              ...
              factory.setLoadTimeWeaver(this.loadTimeWeaver);
              ...
              return factory;
          }
          ...
      }

      That code works. The LoadTimeWeaver is injected and I successfully add it to my factory, then the JPA provider starts instrumenting my classes. However, without this the LoadTimeWeaver is never added to the LocalContainerEntityManagerFactoryBean and the JPA provider cannot instrument my classes.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                juergen.hoeller Juergen Hoeller
                Reporter:
                guitarking117 Nick Williams
                Last updater:
                Juergen Hoeller
              • Votes:
                9 Vote for this issue
                Watchers:
                14 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:
                  Days since last comment:
                  2 years, 9 weeks, 6 days ago