@ Configurable-Beans funktionieren nicht mit JPA-EntityListenern in Spring Boot

Ich habe ein seltsames Problem mit einem benutzerdefinierten JPA-Entity-Listener, den ich in einer Spring-Boot-Anwendung erstellt habe. Ich versuche, Federn zu verwenden@Configurable Mechanismus zum Konfigurieren des EntityListener (siehe SpringsAuditingEntityListener) aber Spring weigert sich, meinen Listener zu erkennen, sobald er im @ verwendet wi@EntityListeners -Anmerkung zu einer jpa-Entität. Wenn es nicht auf einer jpa-Entität konfiguriert ist, wird der Listener von Spring so verdrahtet / konfiguriert, wie er sollte.

Ich habe ein Beispielprojekt mit einem Junit-Test erstellt, um das Problem zu demonstrieren:https: //github.com/chrisi/aopconfig/find/maste

@SpringBootApplication
@EnableSpringConfigured
@EnableLoadTimeWeaving
public class Application {

  public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
  }
}

The EntityListener:

/**
 * This bean will NOT be instanciated by Spring but it should be configured by Spring
 * because of the {@link Configurable}-Annotation.
 * <p>
 * The configuration only works if the <code>UnmanagedBean</code> is not used as an <code>EntityListener</code>
 * via the {@link javax.persistence.EntityListeners}-Annotation.
 *
 * @see FooEntity
 */
@Configurable
public class UnmanagedBean {

  @Autowired
  private ManagedBean bean;

  public int getValue() {
    return bean.getValue();
  }
}

The Bean Ich möchte in den EntityListener / UnmanagedBean injiziert werden:

/**
 * This bean will be instanciated/managed by Spring and will be injected into the
 * {@link UnmanagedBean} in the case the <code>UnmanagedBean</code> is not used as an JPA-EntityListener.
 */
@Component
@Data
public class ManagedBean {
  private int value = 42;
}

Die Entität, in der der Listener verwendet werden soll:

/**
 * This simple entity's only purpose is to demonstrate that as soon as
 * it is annotated with <code>@EntityListeners({UnmanagedBean.class})</code>
 * springs configurable mechanism will not longer work on the {@link UnmanagedBean}
 * and therefore the <code>ConfigurableTest.testConfigureUnmanagedBean()</code> fails.
 */
@Entity
@EntityListeners({UnmanagedBean.class}) // uncomment to make the test fail
public class FooEntity {

  @Id
  private Long id;

  private String bar;
}

Und schließlich der Test, der zeigt, dass die Verkabelung nicht funktioniert, sobald der Listener verwendet wird:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
public class ConfigurableTest {

  /**
   * This test checks if the ManagedBean was injected into the UnmanagedBean
   * by Spring after it was created with <code>new</code>
   */
  @Test
  public void testConfigureUnmanagedBean() {
    UnmanagedBean edo = new UnmanagedBean();
    int val = edo.getValue();
    Assert.assertEquals(42, val);
  }
}

Der Junit-Test (die Verkabelung des EntityListener / ManagedBean) schlägt fehl, sobald die Annotation@EntityListeners({UnmanagedBean.class}) imFooEntity ist aktiviert

Ist das ein Fehler oder habe ich etwas anderes verpasst?

Um den Test auszuführen, müssen Sie @ verwend-javaagent:spring-instrument-4.1.6.RELEASE.jar auf der Kommandozeile und geben Sie die JAR-Datei im Arbeitsverzeichnis an.

Dies ist die "komprimierte" Version einer Frage, die ich zuvor gestellt habe:@ Konfigurierbar in SpringBoot-Anwendung nicht erkannt

Antworten auf die Frage(0)

Ihre Antwort auf die Frage